Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1906949
  • 博文数量: 321
  • 博客积分: 3440
  • 博客等级: 中校
  • 技术积分: 2992
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-24 09:08
个人简介

我就在这里

文章分类

全部博文(321)

文章存档

2015年(9)

2014年(84)

2013年(101)

2012年(25)

2011年(29)

2010年(21)

2009年(6)

2008年(23)

2007年(23)

分类: Python/Ruby

2013-01-24 20:40:17

已经实现了如何获得对应的cookie,具体参考:
【已解决】Python中如何获得访问网页所返回的cookie
现在想要把已获得cookie,在http的提交post请求的时候,也同时发送过去。
即,实现带cookie的http的post。

【解决过程】
1.看了这里
http://www.ideawu.net/blog/archives/270.html
的介绍,好像是cookiejar,自动管理的,不需要手动指定之前已有的cookie了。
去写代码试试。

2.后来的结果证实了,接下来,直接调用urllib2.Request,其自动会把cookie送过去的,
因为之前已经是urllib2.build_opener,添加了对应cookiejar去自动管理cookie了。
对应的代码如下:


# first url request
baiduSpaceEntryUrl = "http://hi.baidu.com/motionhouse";
cj = cookielib.CookieJar();
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));
urllib2.install_opener(opener);
resp = urllib2.urlopen(baiduSpaceEntryUrl);
 
# second time do url request, the cookiejar will auto handle the cookie
loginBaiduUrl = "https://passport.baidu.com/?login";
para = {
    'username'  : username,
    'password'  : password,
    'mem_pass'  : 'on',
    };
postData = urllib.urlencode(para);
req = urllib2.Request(loginBaiduUrl, postData); # urllib2.Request: the HTTP request will be a POST instead of a GET when the data parameter is provided.
req.add_header('User-Agent', gConst['userAgentIE9']);
req.add_header('Content-Type', 'application/x-www-form-urlencoded');
req.add_header('Cache-Control', 'no-cache');
req.add_header('Accept', '*/*');
req.add_header('Connection', 'Keep-Alive');
resp = urllib2.urlopen(req);
respInfo = resp.info();

【总结】

Python中的cookiejar,自动帮我们管理好cookie,用起来,还是蛮方便的。

我们要做的只是,第一次build_opener的时候,把对应的cookiejar传进去,

以后每次的http的request,都会自动包含了cookie,而不需要我们操心了

转自:http://www.crifan.com/python_http_post_request_with_cookie/


阅读(40227) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~