2012-06-04 2 views
2

Update:httplib.HTTPSConnection тайм-аут при подключении к Amazon Web Services

Я был в состоянии сузить ниже:

>>> import httplib 
>>> h1 = httplib.HTTPSConnection('s3.amazonaws.com') 
>>> h1.request ("GET", "/") 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 958, in request 
    self._send_request(method, url, body, headers) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 992, in _send_request 
    self.endheaders(body) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 954, in endheaders 
    self._send_output(message_body) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 814, in _send_output 
    self.send(msg) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 776, in send 
    self.connect() 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1161, in connect 
    self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 382, in wrap_socket 
    ciphers=ciphers) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 143, in __init__ 
    self.do_handshake() 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 306, in do_handshake 
    self._sslobj.do_handshake() 
error: [Errno 60] Operation timed out 

Принимая во внимание:

>>> h1 = httplib.HTTPSConnection('google.com') 
>>> h1.request ("GET", "/") 
>>> r1 = h1.getresponse() 
>>> print r1.status, r1.reason 
301 Moved Permanently 

Что это о AWS, который freaking httplib.HTTPSConnection?

(я знаю, что выше запрос не правильный и полный запрос AWS, но я упростил это просто, чтобы попытаться получить ответ от сервера.)

Первоначальный запрос:

Пожалуйста помочь отчаянному разработчику. Я выполнил все инструкции по установке и включению django-storage и boto в своем приложении для загрузки файлов на S3. (. Как это приложение предназначено для развертывания на Heroku, я использую virtualenv для управления зависимостями)

Для местного развития я положил все свои полномочия в ~/.bash_profile:

export AWS_ACCESS_KEY_ID=xxxx 
export AWS_SECRET_ACCESS_KEY=yyyy 
export S3_BUCKET_NAME=zzzz 

Итак, большой, но тогда это:

> python manage.py shell 
>>> import boto 
>>> conn = boto.connect_s3() 
>>> conn.get_all_buckets() 

Производит эти отладочные сообщения и эту ошибку:

2012-06-04 23:17:34,432 [DEBUG] boto: path=/ 
2012-06-04 23:17:34,432 [DEBUG] boto: auth_path=/ 
2012-06-04 23:17:34,433 [DEBUG] boto: Method: GET 
2012-06-04 23:17:34,433 [DEBUG] boto: Path:/
2012-06-04 23:17:34,433 [DEBUG] boto: Data: 
2012-06-04 23:17:34,433 [DEBUG] boto: Headers: {} 
2012-06-04 23:17:34,433 [DEBUG] boto: Host: s3.amazonaws.com 
2012-06-04 23:17:34,433 [DEBUG] boto: establishing HTTPS connection: host=s3.amazonaws.com, kwargs={'timeout': 2} 
2012-06-04 23:17:34,433 [DEBUG] boto: Token: None 
2012-06-04 23:17:34,436 [DEBUG] boto: StringToSign: 
GET 


Tue, 05 Jun 2012 03:17:34 GMT 
2012-06-04 23:17:36,900 [DEBUG] boto: encountered SSLError exception, reconnecting 
2012-06-04 23:17:36,901 [DEBUG] boto: establishing HTTPS connection: host=s3.amazonaws.com, kwargs={'timeout': 2} 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "../venv/lib/python2.7/site-packages/boto/s3/connection.py", line 346, in get_all_buckets 
    response = self.make_request('GET', headers=headers) 
    File "../venv/lib/python2.7/site-packages/boto/s3/connection.py", line 454, in make_request 
    override_num_retries=override_num_retries) 
    File "../venv/lib/python2.7/site-packages/boto/connection.py", line 838, in make_request 
    return self._mexe(http_request, sender, override_num_retries) 
    File "../venv/lib/python2.7/site-packages/boto/connection.py", line 803, in _mexe 
    raise e 
SSLError: _ssl.c:484: The handshake operation timed out 

То, что я не понимаю, заключается в том, что использование ТОЧНЫХ ТОЧНЫХ ПОЛНОМОЧИЙ Я могу без проблем подключиться с помощью графического интерфейса на моем Mac для просмотра S3. Я могу перечислить все ведра. Я могу попасть в ведро zzzz. Я могу загрузить файл к нему. Я могу загрузить его снова. Я могу удалить его. Все хорошо. Но независимо от того, что я пробую через Boto, это время без комментариев.

Почему вы выбрали время в моей местной среде ?!

ответ

1

К сожалению, похоже, что проблема связана с моим домашним интернетом! Когда я забрал ноутбук в другом месте, проблема не повторилась. Таким образом, проблема не имеет ничего общего с Django, Boto, AWS, S3, SSL, Python или что-то интересное, и все зависит от того, сколько Time Warner Cable сосет. Ты можешь в это поверить?!

+0

Вы когда-нибудь выясняли, почему это? Мне пришлось создать файл /etc/boto.cfg и поместить в него '[Boto] \ nis_secure = false', чтобы он работал. –

1

Основываясь на этой линии в вашем отладочный вывод:

boto: establishing HTTPS connection: host=s3.amazonaws.com, kwargs={'timeout': 2} 

Я предполагаю, что вы положили что-то вроде этого в файле конфигурации бото:

[Boto] 
http_socket_timeout = 2 

Является ли это правильно? Если да, то что произойдет, если вы увеличите этот таймаут до 10 секунд или 20 секунд. Вы все еще получаете тайм-аут?

+0

[Boto] отлаживать = 2 http_socket_timeout = 2 num_retries = 0 Да, я сделал это б/с я был слишком нетерпелив, чтобы ждать дольше, чтобы он не в состоянии, когда я увидел, что это был провал последовательно. :-( – TAH

+0

Просто из любопытства, что произойдет, если вы попробуете его без SSL (например,boto.connect_s3 (is_secure = False)? Кстати, я пробовал то же самое на местном уровне, и он работал нормально. Если это работает без SSL, возможно, существует проблема с установкой openssl? – garnaat

+1

Я не уверен, где этот звонок, если честно ... На самом деле я не написал ни одного кода boto. Я включил его в свои настройки.py и сделал это одно изменение для соответствующей модели: filepath = models.FileField (storage = S3BotoStorage (bucket = os.getenv ('S3_BUCKET_NAME')), ...). – TAH

Смежные вопросы