Python在响应

时间:2017-10-24 04:37:10

标签: python cookies

我正在写一个python程序,它会发送一个带密码的帖子请求,如果密码正确,服务器将返回一个特殊的cookie" BDCLND"。

我先在Postman做过这个。您可以在下面的快照中看到我使用的URL,标题,密码和响应cookie。

enter image description here

enter image description here

响应Cookie没有" BDCLND" cookie,因为密码' ssss'错了。但是,服务器确实发送了一个' BAIDUID'现在,如果我使用' BAIDUID' cookie和正确的密码' v0vb'," BDCLND" cookie会出现在响应中。像这样: 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确实打印了#34; BAIDUID",所以那部分是好的,但是,第二个forloop什么都没打印,结果发现第二个cookiejar只是空的。我不确定我在这里做错了什么。请帮忙。

1 个答案:

答案 0 :(得分:1)

您的第二个回复没有Cookie,因为您在cookies参数中手动设置了请求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()