2012-06-04 3 views
2

업데이트 :httplib.HTTPSConnection 타임 아웃을 연결할 때

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

무엇입니까 :

>>> 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 

반면 : 나는 아래에 좁힐 수 있었다

httplib.HTTPSConnection을 놀라게하고있는 AWS에 대해?

(I 위의 요청이 정확하고 완전한 AWS 요청 아니라는 것을 알고,하지만 난 그냥 서버에서 응답을 얻으려고 단순화.)

원래 요청 :

하세요 절망적 인 개발자를 돕는다. 설치 및 django-storages 및 내 애플 리케이션에서 boto S3에 파일을 업로드 할 수 있도록 모든 지시를 따랐습니다. (.이 응용 프로그램에게 Heroku에 배포하기위한 것입니다, 나는이 종속성을 관리 할 수 ​​VIRTUALENV 사용하고 있습니다) 지역 개발을위한

내가 ~/.bash_profile에있는 모든 내 자격 증명을 넣어했습니다

그래서
export AWS_ACCESS_KEY_ID=xxxx 
export AWS_SECRET_ACCESS_KEY=yyyy 
export S3_BUCKET_NAME=zzzz 

, 큰,하지만이 :

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 
,536,913,632 :

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

다음 디버깅 메시지와이 오류를 생성 10

내가 이해할 수없는 것은 동일한 신임을 사용하여 내 Mac에서 GUI를 사용하여 S3을 탐색해도 문제없이 연결할 수 있다는 것입니다. 모든 양동이를 나열 할 수 있습니다. 버킷 zzzz에 들어갈 수 있습니다. 파일을 업로드 할 수 있습니다. 다시 다운로드 할 수 있습니다. 나는 그것을 삭제할 수있다. 모든 것이 잘됩니다. 그러나 내가 Boto를 통해 무엇을 시도하든 아무런 설명없이 시간이 지납니다. 왜 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 설정 파일에 이런 식으로 뭔가를 넣어했다고 가정 :

[Boto] 
http_socket_timeout = 2 

올바른인가요? 그렇다면이 제한 시간을 10 초 또는 20 초로 늘리면 어떻게됩니까? 여전히 시간 초과가 있습니까?

+0

[BOTO] 디버그 = 2 http_socket_timeout = 2 num_retries = 0 그래, 내가 한 그 내가 그것을 지속적으로 실패하는 것을보고 일단 실패를 위해 더 이상 기다릴 너무 조급했다 C/B. :-( – TAH

+0

호기심에서 벗어나 SSL없이 시도하면 어떻게됩니까?boto.connect_s3 (is_secure = False)? BTW, 내가 똑같은 일을 로컬로 시도하고 괜찮 았는데. SSL없이 작동하는 경우 openssl install에 문제가있을 수 있습니까? – garnaat

+1

솔직히 말해서 그 전화가 어디에 있는지 나는 잘 모르겠다. 나는 실제로 어떤 boto 코드도 쓰지 않았다. 내 settings.py에서 활성화하고 관련 모델 : filepath = models.FileField (storage = S3BotoStorage (bucket = os.getenv ('S3_BUCKET_NAME')), ...)로 변경했습니다. – TAH