A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
奈斯,感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马