2016-12-27 5 views
3

何時間も探してみましたが、何も動作していないようです。私はいくつかのデータをダウンロードするためにウェブページにログインしようとしています。ブラウジング接続が終了すると、ログインには新しいCookie(PHPSESSID)が必要になります。Pythonリクエスト:POSTとCookieを使用してWebサイトにログイン

import requests 

payload = {'user':'myusername', 'password':'mypassword'} 
url = 'blahblah.blah' 

with requests.Session() as s: 
    r = s.get(url) 
    cookie = {'PHPSESSID': r.cookies['PHPSESSID']} 
    r = s.post(url, data=payload, cookies=cookie) 

これは、しかし、私は、ログインに失敗したことだと思いログインページにリダイレクトします。私は、次の試してみました。私はその後、クロムを介してログインしようとし、手動でクッキーを取得します。私がこれを行うと、そのクッキーを使ってリクエストを使ってログインすることができます。

with requests.Session() as s: 
    cookie = {'PHPSESSID': 'some value obtained by logging in through Chrome and copying the cookie value'} 
    r = s.post(url, cookies=cookie, data=payload) 

上記は完璧に機能します。

元のコードで何が間違っているのかわかりません。どんな援助もありがとう! 、あなたはあなたがログインしている その後の要求のためにあなたのcookieを使用することができた後

+0

リクエストセッションを使用するポイントは、Cookieが連続したリクエストで自動的に返されることです。あなたはあなた自身でクッキーを設定しませんか?またはs.cookiesを使って設定する – dhishan

+0

私はクッキーを手動で設定せずに試しましたが、動作しませんでした。ログインページにリダイレクトされます。 – onepint16oz

+0

Wiresharkツールを使ってサーバーが受信して送信したクッキーを分析し、 'cookie = {'PHPSESSID':r.cookies ['PHPSESSID']}'によって割り当てられたクッキーをチェックし、r.statusまたはr.historyをこのコードをインタプリタで実行します。コードは実際に私にはうまく見えます。 @dhishanが言ったように – dhishan

答えて

0
import requests 

payload = {'user':'myusername', 'password':'mypassword'} 
url = 'blahblah.blah' 

with requests.Session() as s: 
    r = s.post(url, data=payload) 
    cookie = {'PHPSESSID': requests.utils.dict_from_cookiejar(s.cookies)['PHPSESSID']} 

、私はそれはあなたが作るべきであるpost要求されるべきだと思います。

関連する問題