2011-03-17 22 views
0

當我嘗試連接到Twitter時,我在oauth庫(Django socialauth)中收到一個CannotSendRequest。Python CannotSendRequest

Traceback: 
File "/Library/Python/2.6/site-packages/django/core/handlers/base.py" in get_response 
100.      response = callback(request, *callback_args, **callback_kwargs) 
File "/Users/me/webfaction/project/socialauth/views.py" in twitter_login 
94.  request_token = twitter.fetch_request_token(callback=request.build_absolute_uri(reverse('socialauth_twitter_login_done'))) 
File "/Users/me/webfaction/project/socialauth/lib/oauthtwitter2.py" in fetch_request_token 
50.   return oauth.OAuthToken.from_string(oauth_response(oauth_request)) 
File "/Users/me/webfaction/project/socialauth/lib/oauthtwitter2.py" in oauth_response 
33.  connection().request(req.http_method, req.to_url()) 
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py" in request 
914.    self._send_request(method, url, body, headers) 
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py" in _send_request 
931.   self.putrequest(method, url, **skips) 
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py" in putrequest 
818.    raise CannotSendRequest() 

Exception Type: CannotSendRequest at /accounts/twitter_login/ 
Exception Value: 

這裏就是我創建的HTTP連接

def connection(): 
    try: 
     return connection._connection 
    except AttributeError: 
     connection._connection = httplib.HTTPSConnection(TWITTER_URL) 
    return connection._connection 

def oauth_response(req): 
    connection().request(req.http_method, req.to_url()) 
    return connection().getresponse().read() 

我已經搜查SO,發現這些鏈接,但我仍然不知道如何實施解決方案。我試過了,失敗了。任何幫助,將不勝感激。

httplib CannotSendRequest error in WSGI

When I use httplib for my OAUTH in Python, I always get "CannotSendRequest" and then "

回答

4

The post you linked to說,當你重用拋出一個例外,它沒有到的GetResponse()階段連接這個錯誤發生。

的確,connection.request("GET", "/") x 2會引發錯誤。

建議的解決方案是每次重新創建連接。那是你想要做的嗎?注意我對這個問題沒有意見,你只是問如何實現這些帖子上的內容。

如果是這樣,擺脫你connection()功能,始終做

connection = httplib.HTTPSConnection(TWITTER_URL) 
connection.request(req.http_method, req.to_url()) 
response = connection.getresponse().read() 
connection.close() 
return response 
+0

啊。我忘了關閉()。我認爲創建一個新的HTTPConnection對象就夠了 – CoolGravatar 2011-03-18 00:57:18