2016-04-14 6 views
0

は、コードの関連部分はあります要求は次のように私は要求を使用して、Pythonの3.5.1によ

req = requests.post(self.URL, data={"username": username, "password": password}) 
self.cookies = {"MOODLEID1_": req.cookies["MOODLEID1_"], "MoodleSession": req.cookies["MoodleSession"]} 

self.URLが正しいページがあり、POST意図どおりに動作していますが、私はそれを確認するためにいくつかのプリントを行いました。

マイ出力:

Traceback (most recent call last): 
    File "D:/.../main.py", line 14, in <module> 
    m.login('juan.siqueira', '211621QWe!') 
    File "D:\...\moodle2.py", line 14, in login 
    self.cookies = {"MOODLEID1_": req.cookies["MOODLEID1_"], "MoodleSession": req.cookies["MoodleSession"]} 
    File "D:\...\venv\lib\site-packages\requests\cookies.py", line 287, in __getitem__ 
    return self._find_no_duplicates(name) 
    File "D:\...\venv\lib\site-packages\requests\cookies.py", line 345, in _find_no_duplicates 
    raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path)) 
KeyError: "name='MOODLEID1_', domain=None, path=None" 

私はreq.cookiesが持っているかどうか確認するために、実行時にデバッグしようとしています。しかし、私が得ることは、少なくとも私のためには驚くべきことです。 self.cookies = {...}にブレークポイントを設定して[(c.name, c.value, c.domain) for c in req.cookies]を実行すると、そこにクッキーがないような空のリストが表示されます。

サイトはCookieを送信しますが、Chrome拡張機能で確認すると、「MOODLEID1_」と「MoodleSession」が2つ見つかりました。その理由は何ですか?

+0

サーバーから 'req.headers'ショーが送信されたことは何ですか?そこにSet-Cookieヘッダーがありますか?そうでない場合、サーバーはCookieを送信しませんでした。 –

+0

私は 'req.headers'に' Set-Cookie'が見つかりませんでしたが、Chrome上ではどちらのクッキーも拡張子を使ってはっきりと見ることができます。なぜ私のスクリプトでそれらを見ることができないのですか? – JChris

+0

クッキーは常に 'Set-Cookie'ヘッダを使ってサーバからクライアントに送られます。 ChromeにCookieが存在していても、現在のURLに設定されているわけではありません。 *別の* URLで設定されている可能性があります。サーバが 'Set-Cookie'ヘッダを発行するURLを見つける必要があります。 –

答えて

0

応答にCookieが含まれていないようです。 req.headersに1つまたは複数のSet-Cookieヘッダーがないか探します。

ブラウザに保存されているCookieには、応答にそれぞれのCookieにSet-Cookieというヘッダーが含まれています。サーバーがそれらのクッキーをどのような応答で設定するかを見つけなければなりません。明らかにそれはこのレスポンスではありません。

これらのCookieを1回のリクエストで保持する必要がある場合は、requests.Session() objectを使用してください。これはレスポンスによって返されたクッキーを保持し、新しいリクエストで適切に再送信します。

+0

ありがとうございます。 'requests.Session()'は魅力的に機能しました。実際、これらのCookieは別のURLからのものでした。 – JChris

+0

この回答では問題は解決しません。 –

+0

@ 0n10n_:答えは、OPが持っていた問題を解決しました。あなたが私にそれについて話してくれなかったので、あなたの状況を解決するかどうかは分かりません。 –

関連する問題