#引入需要的module import http.client, urllib.parse,urllib.request import http.cookiejar import http.cookies import re #创建请求参数 params = urllib.parse.urlencode({'email':'****X', 'password': '**XX', 'origURL': '人人网 中国领先的实名制SNS社交网络。加入人人网,找到老同学,结识新朋友。','domain':'renren.com'}) #创建请求头 headers = {"Content-type": "application/x-www-form-urlencoded; charset=UTF-8", "Accept": "text/plain", "Referer":"应届生校招网 [即人人校招]-应届生2013年校园招聘、宣讲会,应届生找工作职位", "User-Agent":"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0" } #链接网站 conn = http.client.HTTPConnection("人人网 中国领先的实名制SNS社交网络。加入人人网,找到老同学,结识新朋友。") #提交接口请求 conn.request("POST", "/PLogin.do", params, headers) #获取请求的响应 response = conn.getresponse() #打印响应的状态码,以字典打印出返回的头部msg print(response.status, response.reason,response.msg) dic=response.msg #关闭链接 conn.close() #生成一个http.cookiejar对象 cj=http.cookiejar.CookieJar() #新建一个opener opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) #植入opener urllib.request.install_opener(opener) #打开重定向的网址 h=opener.open(L) h2=h.read().decode('utf-8') #打印所有的cookie for item in cj: print(item.name,'=',item.value,'\n') if item.name=='xnsid': headers['xnsid']=item.value rtk=re.findall(r'\'\w \'',str(h2)) print(rtk[1][1:-1]) params2={} params2['_rtk']=str(rtk[1][1:-2]) params2=urllib.parse.urlencode(params2).encode() conn2=http.client.HTTPConnection('xiaozhao.renren.com') conn2.request('POST','/message/count',params2,headers) response2=conn2.getresponse() print(response2.status,response2.reason,response2.msg) print(response2.read().decode('utf-8')) conn2.close() 解决办法: (1)如果你使用的http组件支持添加cookie,那最好如果没有只能通过header加一个名字为cookie的header,但这样的缺点是会覆盖原有的内部cookie,一般做的比较成熟的http组件都是有独立的cookie管理对象的 (2)接口测试推荐使用requests库 requests支持带持久 Cookie 的会话 s = requests.Session() s.post(url, headers=headers, data=params) 就解决你的问题了 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|