2016-06-15 17 views
0

Twitter APIからデータを取得するスクリプトを作成しています。 OAuth 1.1の使用は、requestsの上にrequests_oauthlibヘルパーライブラリを使用してセッションを認証していることを意味します。requests_oauthlibを複数回呼び出すとエラーが発生する(urllib3内で実際に発生したエラー)

APIの作品への最初の呼び出しが、次のようにその後の呼び出しはTypeErrorを与える:セッション中持続何かがありますように、それは誤りが来る繰り返しの使用に常にだとして

/Users/phil/code/Virtualenv/req_test/lib/python2.7/site-packages/requests/packages/urllib3/connection.pyc in __init__(self, *args, **kw) 
124 
125   # Superclass also sets self.source_address in Python 2.7+. 
--> 126   _HTTPConnection.__init__(self, *args, **kw) 
127 
128  def _new_conn(self): 

TypeError: unbound method __init__() must be called with HTTPConnection instance as first argument (got VerifiedHTTPSConnection instance instead) 

が見えます。私はピップと差異なしでインストールされた最新のバージョンでクリーンなvirtualenvを試してみました。私は、コンテキストマネージャのアプローチを使用してい

ので、セッションが起きてからこれを防ぐ、各呼び出しの後に破壊されるだろうと思った:

with ro.OAuth1Session(**self._auth) as s: 
    response = s.get(url) 

任意の修正やポインタは、問題が認識されるであろう引き起こしているかを理解すること。

編集:私はrequestsドキュメント(http://docs.python-requests.org/en/master/user/authentication/)で説明したが、同じエラーが発生すると、セッションを構築する別の方法を使用して、別のアプローチを試みました。

編集:それは便利だ場合にフルスタック:(自己

/Users/phil/code/Virtualenv/req_test/lib/python2.7/site-packages/requests/sessions.pyc GETで、 URL、** kwargsから) 486 kwargs.setdefault( 'allow_redirects'、TRUE) - > 487リターンself.request( 'GET'、URL、** kwargsから) 489 DEFオプション(自己、URL 、** kwargs):

/Users/phil/code/Virtualenv/req_test/lib/python2.7/site-packages/requests/sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json) 
    473   } 
    474   send_kwargs.update(settings) 
--> 475   resp = self.send(prep, **send_kwargs) 
    476 
    477   return resp 

/Users/phil/code/Virtualenv/req_test/lib/python2.7/site-packages/requests/sessions.pyc in send(self, request, **kwargs) 
    583 
    584   # Send the request 
--> 585   r = adapter.send(request, **kwargs) 
    586 
    587   # Total elapsed time of the request (approximately) 

/Users/phil/code/Virtualenv/req_test/lib/python2.7/site-packages/requests/adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies) 
    401      decode_content=False, 
    402      retries=self.max_retries, 
--> 403      timeout=timeout 
    404    ) 
    405 

/Users/phil/code/Virtualenv/req_test/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.pyc in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, **response_kw) 
    564    # Request a connection from the queue. 
    565    timeout_obj = self._get_timeout(timeout) 
--> 566    conn = self._get_conn(timeout=pool_timeout) 
    567 
    568    conn.timeout = timeout_obj.connect_timeout 

/Users/phil/code/Virtualenv/req_test/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.pyc in _get_conn(self, timeout) 
    254     conn = None 
    255 
--> 256   return conn or self._new_conn() 
    257 
    258  def _put_conn(self, conn): 

/Users/phil/code/Virtualenv/req_test/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.pyc in _new_conn(self) 
    800   conn = self.ConnectionCls(host=actual_host, port=actual_port, 
    801         timeout=self.timeout.connect_timeout, 
--> 802         strict=self.strict, **self.conn_kw) 
    803 
    804   return self._prepare_conn(conn) 

/Users/phil/code/Virtualenv/req_test/lib/python2.7/site-packages/requests/packages/urllib3/connection.pyc in __init__(self, host, port, key_file, cert_file, strict, timeout, **kw) 
    208 
    209   HTTPConnection.__init__(self, host, port, strict=strict, 
--> 210         timeout=timeout, **kw) 
    211 
    212   self.key_file = key_file 

/Users/phil/code/Virtualenv/req_test/lib/python2.7/site-packages/requests/packages/urllib3/connection.pyc in __init__(self, *args, **kw) 
    124 
    125   # Superclass also sets self.source_address in Python 2.7+. 
--> 126   _HTTPConnection.__init__(self, *args, **kw) 
    127 
    128  def _new_conn(self): 

TypeError: unbound method __init__() must be called with HTTPConnection instance as first argument (got VerifiedHTTPSConnection instance instead) 

答えて

0

編集有する:th1SessionはIPython/Jupyter内コンテナライブラリを再ロードすることも添加参照。

読書の公平なビットた後、あなたがリクエストに応じてgetを呼び出すが、(私は流れをデバッグ/構築しながら、何をしたかである)応答の本体にアクセスしないときに問題が発生する可能性が表示されます。

http://docs.python-requests.org/en/master/user/advanced/#keep-alive

"Note that connections are only released back to the pool for reuse once all body data has been read; be sure to either set stream to False or read the content property of the Response object." 

だから、答えはあなたが要求を行った後、最初に行う事はResponse.contentResponse.json()または類似のメソッドを呼び出すことにより応答をフラッシュであることを確認することです。

requests_oauthlibライブラリの使用時に問題が発生したのは、使用するセッションがあまり一般的でないためです。 FacebookやLinkedIn APIと同様に、セッションオブジェクト自体に影響を与えないクエリパラメータを使用することで問題なく実行できました。

また、IPython/Jupyter内でヘルパーライブラリをリロードするときに最も頻繁に発生しました。ノートブックまたはコマンドラインセッションを終了して再起動すると、問題が削除されます。

0

OAu

oauth = OAuth1Session(client_key, 
         client_secret=client_secret, 
         resource_owner_key=resource_owner_key, 
         resource_owner_secret=resource_owner_secret, 
         verifier=verifier) 

**はキーワード引数で使用され、そしてOAuth1Sessionは異なる署名を

+0

ありがとう、それはそれを修正しません。私はあなたの提案や同じ結果に応じて、明示的なバージョンを試してみました。インタラクティブモードでの最初の使用で動作するので、呼び出しではありません。問題は2回目の呼び出しであるため、メソッドが呼び出される方法に問題はありません。 –

関連する問題