urllib库模拟简单的Post请求 && 使用Cookie模拟用户访问
本文使用Python3.0的urllib库实现。
模拟简单的Post请求
在上一篇文章中,介绍了通过urllib.request.Request(),返回一个request对象。Request()方法有3个重要的参数,分别是url, data, headers。data:指的是请求体(这也是区分url是get请求还是post的请求的区别)。headers是请求头部分。
下面看一个示例:示例的post请求的url是简书的一个链接,通过fiddle软件抓包获取到的。
from urllib import request, parse
import json
if __name__ == '__main__':
# url链接
url = 'http://www.jianshu.com/notes/5a01da1f4fad/mark_viewed.json'
# 请求头部分
headers = {
'User-Agent': 'Mozilla/5.0(Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3427.400 QQBrowser/9.6.12513.400'
}
# 请求体,Request有无data参数,是用于区分是get请求还是post请求
data = {"uuid": "fd44906b-9bc4-425d-9b1d-5ae18005ba7e"}
# 将data数据经过url编码,后转成utf-8编码
data = parse.urlencode(data).encode(encoding='UTF8')
# 获取一个请求对象
req = request.Request(url, data=data, headers=headers)
# 请求url,获取响应对象
resp = request.urlopen(req)
# 获取响应的结果
result = resp.read()
# 响应结果的类型
print(type(result)) # <class 'bytes'>
# 通过json库转成字典数据
print(json.loads(result)) # {'message': 'success'}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
使用cookie模拟用户访问
我们知道cookie是用于用户登入网站后,保存到客户端的,以便于下次可以保持用户的访问。
cookie怎么获取呢,一般可以通过抓包工具获取,下面使用fiddler来抓取登入获取cookie。
打开fiddler抓包工具软件
浏览器打开登入网站,输入用户名和密码登入,访问需要模拟的网站
通过fiddler抓取登入的url,获取cookie
获取cookie的数据,通过Python代码模拟用户访问
if __name__ == '__main__':
# 定义一个url
url = 'http://my.csdn.net/qq_33689414'
# 自定义headers,headers中包含用户登入请求的cookie,以便于cookie模拟用户访问
headers = {
'User-Agent': 'Mozilla/5.0(Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3427.400 QQBrowser/9.6.12513.400',
'Cookie': 'uuid_tt_dd=-4106733179937207813_20170811; UM_distinctid=15ddf8a370d4e9-0f483d3d0a488e-791238-144000-15ddf8a370e4f8; kd_user_id=5256d399-c8e7-4db7-aeb9-e8127cab4cf5; bdshare_firstime=1509844263855; __message_sys_msg_id=0; __message_gu_msg_id=0; __message_cnel_msg_id=0; __message_district_code=310000; __message_in_school=0; __utma=17226283.1582608574.1507866652.1508409372.1510125564.3; __utmz=17226283.1507866652.1.1.utmcsr=blog.csdn.net|utmccn=(referral)|utmcmd=referral|utmcct=/u013045971/article/details/42396539; UserName=qq_33689414; UserInfo=ChnXHl65%2BQJsX9ttF%2FaQjFA4g63jTgu7QdqUEAt3caoiddJQjEgHwurc%2BAyrSVQy8FybrhRQTJHRTlCvrMajxT1ywnUL7YmGvtWMh3yCHl0LO7DPDU1fJ%2FFA8rLdo0kY8WqmCqo79imdoTIijTboNw%3D%3D; UserNick=%E5%BC%A0%E8%A1%8C%E4%B9%8B; AU=7F0; UD=%E9%97%BB%E9%81%93%E6%9C%89%E5%85%88%E5%90%8E%EF%BC%8C%E6%9C%AF%E4%B8%9A%E6%9C%89%E4%B8%93%E6%94%BB%E3%80%82; UN=qq_33689414; UE="zhang3550545@126.com"; BT=1510242149377; access-token=7ecf75b6-f5a4-4827-8f49-caf3ab78ddb2; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1510235527,1510236095,1510239974,1510242137; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1510242258; dc_tos=oz5qdu; dc_session_id=1510242137325_0.6458248928641841'
}
# 因为是get请求的方式,这里没有data参数
req = request.Request(url, headers=headers)
# 请求服务端,返回一个响应对象
resp = request.urlopen(req)
# 读取响应的信息
result = resp.read()
# 打印响应信息的类型
print(type(result))
# 将响应的信息写入文件
with open('my_csdn.html', 'wb') as f:
f.write(result)
---------------------
【转载,仅作分享,侵删】
作者:张行之
来源:CSDN
原文:https://blog.csdn.net/qq_33689414/article/details/78553424
版权声明:本文为博主原创文章,转载请附上博文链接!
|
|