Python3發送post請求,自動記住cookie


轉載自:http://www.cnblogs.com/meitian/p/4607737.html

在做登錄的post請求時,需要記住cookie,否則不能訪問登錄后的頁面。

下面是登錄的代碼:

#coding:utf-8
import urllib
import http.cookiejar

url = "http://c.highpin.cn/Users/CLogin"
postdata =urllib.parse.urlencode({
"Logon_Password":"sunmin",
"Logon_PostCode":"fghc",
"Logon_RememberMe":"false",
"Logon_UserEmail":"sun121@qq.com"
}).encode('utf-8')
header = {
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding":"utf-8",
"Accept-Language":"zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3",
"Connection":"keep-alive",
"Host":"c.highpin.cn",
"Referer":"http://c.highpin.cn/",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
}
req = urllib.request.Request(url,postdata,header)
##print(urllib.request.urlopen(req).read().decode('utf-8'))

#自動記住cookie
cj = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
r = opener.open(req)
print(r.read().decode('utf-8'))

以前用的是python2.7,但是python3開始很多包的位置和以前不一樣了,就對這里用到的說明一下:

urllib2合並到了urllib下,urlopen使用時包的位置為urllib.request.urlopen,urlencode使用包位置為urllib.parse.urlencode

cookielib變更為了http.cookiejar

 

說明:帶cookie的打印出來必須用opener.open(req).read().decode('utf-8')來發送的請求才會帶上cookie,如果用urllib.request.urlopen()是不帶cookie的

 

說明:
1.urllib.request.Request()返回了一個request的請求實例
2.urlopen是一個封裝好的OpenerDirector實例,里面只有三個參數(url,data,timeout)
3.通過build_opener可以自己創建一個OpenerDirector實例,所以如果想要構建一個cookie管理
   build_opener(*handlers),將handler類實例化增加到OpenerDirector中,比如像上面的例子里增加cookie,
 
 
如果已知cookie內容,且要用這個固定cookie去發送請求,可以在header中直接添加cookie內容去發送請求,例子如下:
比如通過fiddle抓取請求包,看到請求和相應的raw格式,可以看到cookie(cookie屬於header)。
import urllib
url = "http://h.highpin.cn/ManageJob/PubJobCompany?Length=9"
postdata=urllib.parse.urlencode({
"JobName":"測試工程師",
"YearlySalaryMin":"11",
"YearlySalaryMax":"12",
"X-Requested-With":"XMLHttpRequest",
"WorkExperienceMin":"-1",
"WorkExperienceMax":"-1",
"TabId":"0",
"SubordinateCount":"0",
"SaveType":"1",
"ReportObject":"測試人",
"RecruitCount":"1",
"QualifiCation":"信息描述",
"ProfessionalName":"",
"nowCurrentPageIndex":"0",
"Memo":"限500字",
"MasteryDegree":"1",
"MajorID":"-1",
"LanguageType":"-1",
"JobTypeID":"1050000,4000000,160000",
"JobTagCount":"8",
"JobStatus":"1",
"JobDescription":"職位描述",
"JobAllTagStr":"五險一金",
"IsViewHighEndUser":"false",
"IsFull":"true",
"FullTime":"false",
"DepName":"測試",
"Degree":"-1",
"CompanyID":"2234",
"CloseDate":"2016-01-12",
"AreaID":"530",
"AgeMin":"-1",
"AgeMax":"-1"
}).encode('utf-8')
header={
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding":"utf-8",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0",
"Host":"h.highpin.cn",
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
"Referer":"http://h.highpin.cn/ManageJob/PubNewJob",
"Cookie":"XXXXX",
"Connection":"keep-alive"
}
req = urllib.request.Request(url,postdata,header)
r=urllib.request.urlopen(req)
print(r.read().decode('utf-8'))
說明:cookie中的內容我給替換掉了,放上自己的cookie就可以了
 

Python3和Python2的變更,可以參考文章:http://blog.csdn.net/samxx8/article/details/21535901    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM