2017-05-17 13 views
0

このような問題があります: リクエストモジュールからのセッションを使用しています。im pythonセッションは最初のリクエストでのみ許可を送信しますが、なぜこれが起こったのですか?Pythonのセッション認証

{'Authorization': 'Basic auth_data', 'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.12.3'} 

をしかし、私は同じでもなく、同じURLを使用して次の要求を送信する場合:私はこの応答リクエストヘッダを探している場合

import requests 
session = requests.Session() 
session.auth = (u'user', 'test') 
session.verify = False 
response = session.get(url='https://my_url/rest/api/1.0/users') 

は私が見

response = session.get(url='https://my_url/rest/api/1.0/users') 

私がいることがわかります認証ヘッダーは要求に応じてありません:

print response.request.headers 
{'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.12.3'} 

そして私はそれのために401の応答を得ています。

なぜそうですか?セッションはそれを使用して行われたすべてのリクエストで認証を送信する必要がありますか? セッションを使用してリクエストごとに認証データを送信するにはどうすればよいですか?私はあなたのコメントの正確なコードがAuthorizationヘッダは最初printに欠落していることで、まだそれは中に存在していることを実行したときに、私が見る何

+0

あなたはそうです、それはうまくいくはずです。あなたは 'session = requests.Session()'をもう一度呼び出すのではないか、そうでなければ 'session.auth'をリセットしていますか? – mhawke

+0

ば完全に、あなたがヘッダを参照してください。このコードを実行してみてください自分 'インポート要求 セッション= requests.Session() session.auth =(u'x-OAuthのトーク​​ン」、 'テスト') session.verify = Falseの レスポンス= session.get(url = 'https://test.com') レスポンスを返す.request.headers レスポンス= session.get(url = 'https://test.com') レスポンス。 headers' – Vova

答えて

2

。これはあなたが報告する問題の反対であるようです。

これは、最初の要求が301応答によってリダイレクトされ、認証ヘッダーがリダイレクトされた場所へのフォローアップ要求で伝播されないという事実によって説明されます。 authヘッダーが最初の要求でresponse.history[0].request.headersを見て送信されたことがわかります。

セッションがホストへの接続を開いているため(Connection: keep-aliveヘッダーのため)、第2の要求はリダイレクトされないため、print response.request.headersのときに認証ヘッダーが表示されます。

私はあなたが実際にhttps://test.comを使用しているのではないかと疑いますが、使用しているサーバーでおそらく同様のことが起こります。

テストには、非常に便利な公開テストのHTTPサーバーhttps://httpbin.org/headersを使用することをお勧めします。これにより、応答本体のサーバーが受信したヘッダーが戻されます。リダイレクトされたリクエストは、リダイレクトURLの1つでテストできます。

+0

は問題を解決します - 認証はリダイレクトのために送信されませんでした。私はリダイレクト先とセッションがすべての要求で認証を送信し始めるリクエストでホストを変更します。 – Vova

関連する問題