博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python3发送post请求,自动记住cookie
阅读量:6318 次
发布时间:2019-06-22

本文共 3321 字,大约阅读时间需要 11 分钟。

转载自: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    

转载于:https://www.cnblogs.com/zl0372/p/5486683.html

你可能感兴趣的文章
c#学习笔记05——数组&集合
查看>>
【图论算法】Dijstra&BFS
查看>>
注册和上传文件(头像)
查看>>
使用OVS
查看>>
键盘回收的几种方法
查看>>
Python(条件判断和循环)
查看>>
day4 linux安装python
查看>>
LeetCode Container With Most Water (Two Pointers)
查看>>
vue (v-if show 问题)
查看>>
https基础
查看>>
并查集模板
查看>>
RESTful Mongodb
查看>>
BZOJ3237:[AHOI2013]连通图(线段树分治,并查集)
查看>>
如何提高Ajax性能
查看>>
Android--自定义加载框
查看>>
LINUX下 lamp安装及配置
查看>>
BZOJ3105 [cqoi2013]新Nim游戏
查看>>
困惑的前置操作与后置操作
查看>>
SDNU 1269.整数序列(水题)
查看>>
BZOJ 2118 Dijkstra
查看>>