我正在写一个python程序,它会发送一个带密码的帖子请求,如果密码正确,服务器将返回一个特殊的cookie" BDCLND"。
我先在Postman做过这个。您可以在下面的快照中看到我使用的URL,标题,密码和响应cookie。
响应Cookie没有" BDCLND" cookie,因为密码' ssss'错了。但是,服务器确实发送了一个' BAIDUID'现在,如果我使用' BAIDUID' cookie和正确的密码' v0vb'," BDCLND" cookie会出现在响应中。像这样:
然后我写了这样的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只是空的。我不确定我在这里做错了什么。请帮忙。
答案 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()