实现带cookie的HTTP的Post请求

上篇实现了获取cookie,现在将已经获得的cookie,在提交HTTP的Post请求时,也发送出去,即实现带cookie的HTTP的Post请求

import cookielib,urllib,urllib2

#第一次请求URL
baiduSpaceEntryUrl='http://hi.baidu.com/motionhouse'    #百度空间URL
cj=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
resp=urllib2.urlopen(baiduSpaceEntryUrl)

#第二次请求URL,cookiejar自动管理cookie,将得到的cookie信息发送出去
loginBaiduUrl='http://passport.baidu.com/?login'    #登陆百度空间的URL
para={
    'username':'XXXXXXXX',
    'password':'XXXXXXXX',
    'mem_pass':'on',  #勾选下次自动登陆
    }
postData=urllib.urlencode(para)
req=urllib2.Request(loginBaiduUrl,postData)  #提供请求参数后request就是Post请求,非Get请求
req.add_header('User-Agent','Mozilla/5.0 (compatible; MSIE 8.0;)')
req.add_header('Content-Type','application/x-www-form-urlencoded')  #Post请求必要条件
req.add_header('Cache-Control','no-cache')
req.add_header('Accept','*/*')
req.add_header('Connection','Keep-Alive')
resp=urllib2.urlopen(req)
respInfo=resp.info()
print respInfo

 
不要在Request里设置header,因为cookie也是header,如果设置header会导致没有cookie,也就没有登录,而是将其他header信息通过add_header方法逐个添加

posted @ 2014-03-23 15:00  junezhang  阅读(27192)  评论(0编辑  收藏  举报