如何使用以前使用Python Requests库或PyCurl的cookie进行POST?

时间:2017-05-01 09:02:05

标签: python cookies python-requests httprequest

我正在尝试使用GET进行一些包含一些数据和之前收到的cookie的POST。 我有一个PyCurl的代码可以正常工作,但我需要使用Requests。但是,虽然我正在执行相同的步骤,但使用请求不起作用。 PyCurl上的工作代码是:

import time
import urllib
import pycurl

curl = pycurl.Curl()
curl.setopt(pycurl.URL, 'https://www.myURL.com/header?time='+str(int(time.time())))
curl.setopt(pycurl.COOKIEJAR, 'cookie_1.txt')
curl.perform()
curl.close()

curl = pycurl.Curl()
curl.setopt(pycurl.URL, 'https://www.myURL.com/login')
post_data = {'actualURL': 'http://www.myURL.com', 'user': 'myemail@gmail.com', 'pass': 'asdfqwerty'}
curl.setopt(pycurl.COOKIEFILE, 'cookie_1.txt')
curl.setopt(pycurl.POSTFIELDS, urllib.urlencode(post_data))
curl.setopt(pycurl.COOKIEJAR, 'cookie_2.txt')
curl.perform()
curl.close()

我收到了' cookie_2.txt'使用关于cookie的新数据提交正确答案。 但是,如前所述,以下代码给出了错误403的响应

import time
import urllib
import requests

r1 = requests.get('https://www.myURL.com/header?time='+str(int(time.time())))
payload = {'actualURL': 'http://www.myURL.com', 'user': 'myemail@gmail.com', 'pass': 'asdfqwerty'}
r2 = requests.post('https://www.myURL.com/login', data=urllib.urlencode(payload), cookies=r1.cookies)

正如您所看到的,我使用了前面提到的here之前收到的相同Cookie。我查了一下r1.cookies'并设置正确。 此外,由于POST数据有特殊字符,我使用了urllib的编码(没有这个,PyCurl不起作用)。

我首先想到的问题是' 请求'来自POST数据上的特殊字符,但我尝试使用编码,没有编码,作为json字符串,...但没有任何作用。 ' r2.cookies'是空的

1 个答案:

答案 0 :(得分:1)

如果您需要处理cookie,我建议requests.Session(),例如:

ses = requests.Session()  # use this object for all get / post requests #

payload = {'actualURL': 'http://www.myURL.com', 'user': 'myemail@gmail.com', 'pass': 'asdfqwerty'}
r1 = ses.get('https://www.myURL.com/header?time='+str(int(time.time())))
r2 = ses.post('https://www.myURL.com/login', data=payload)

print(ses.cookies.get_dict()) 

您可以在此处找到更多信息:http://docs.python-requests.org/en/master/user/advanced/