2017-10-24 16 views
1

私は、パスワードでポストリクエストを送信するpythonプログラムを書いています。パスワードが正しい場合、サーバーは特別なクッキー "BDCLND"を返します。Pythonのポスト要求と応答のクッキーを読む

私はこれを最初に郵便配達員で行いました。 URL、ヘッダー、使用したパスワード、レスポンスCookieは、以下のスナップショットで確認できます。

enter image description here

enter image description here

パスワード 'SSSS' は間違っていたので、応答クッキーは "BDCLND" クッキーを持っていませんでした。しかし、サーバーは「BAIDUID」クッキーを返送しました。「BAIDUID」クッキーと正しいパスワード「v0vb」を持つ別の投稿リクエストを送信した場合、「BDCLND」クッキーがレスポンスに表示されます。このように: enter image description here

それから私はこのようなPythonプログラムを書いた:

import requests 
import string 
import re 
import sys 

def main(): 
    url = "https://pan.baidu.com/share/verify?surl=pK753kf&t=1508812575130&bdstoken=null&channel=chunlei&clienttype=0&web=1&app_id=250528&logid=MTUwODgxMjU3NTEzMTAuMzM2MTI4Njk5ODczMDUxNw==" 
    headers = { 
     "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8", 
     "Referer":"https://pan.baidu.com/share/init?surl=pK753kf"  
    } 
    password={'pwd': 'v0vb'} 
    response = requests.post(url=url, data=password, headers=headers) 
    cookieJar = response.cookies 
    for cookie in cookieJar: 
     print(cookie.name) 

    response = requests.post(url=url, data=password, headers=headers, cookies=cookieJar) 
    cookieJar = response.cookies 
    for cookie in cookieJar: 
     print(cookie.name) 
main() 

私はこれを実行すると、最初のforloopは、その部分は、しかし、第二に良いですので、「BAIDUID」まで印刷しましたforloopは何も印刷されませんでしたが、それは2番目のcookiejarが空であることが判明しました。私はここで何が間違っているのか分かりません。助けてください。

答えて

1

cookiesパラメータでリクエストクッキーを手動で設定したため、2番目のレスポンスにCookieがないため、サーバーは「Set-Cookie」ヘッダーを送信しません。

cookiesパラメータでリクエスト間でCookieを渡すことはお勧めできません。代わりにSessionオブジェクトを使用してください。

import requests 

def main(): 
    ses = requests.Session() 
    ses.headers['User-Agent'] = 'Mozilla/5' 
    url = "https://pan.baidu.com/share/verify?surl=pK753kf&t=1508812575130&bdstoken=null&channel=chunlei&clienttype=0&web=1&app_id=250528&logid=MTUwODgxMjU3NTEzMTAuMzM2MTI4Njk5ODczMDUxNw==" 
    ref = "https://pan.baidu.com/share/init?surl=pK753kf" 
    headers = {"Referer":ref} 
    password={'pwd': 'v0vb'} 

    response = ses.get(ref) 
    cookieJar = ses.cookies 
    for cookie in cookieJar: 
     print(cookie.name) 

    response = ses.post(url, data=password, headers=headers) 
    cookieJar = ses.cookies 
    for cookie in cookieJar: 
     print(cookie.name) 

main() 
+0

こんにちは、私は、私は「BAIDUID」第二応答でクッキー、まだありません「BDCLND」クッキーをプリントアウトすることができ、この時間は、あなたのコードを試してみました... – NJUHOBBY

+0

私は実際には第二応答のステータスがあることに気づきました'404が見つかりません'、郵便配達員には200 OKです。なぜ違いがあるのか​​不思議です。 – NJUHOBBY

+0

あなたはUser-Agentを詐称し、RefererからいくつかのCookieを入手しなければなりません。コードを更新しました。 –

関連する問題