# 介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) # 注意:requests库发送请求将网页内容下载下来以后,并不会执行js代码,这需要我们自己分析目标站点然后发起新的request请求 1. Request = requests.rquest(method, url, **kwargs) # 构造一个请求 # ethod(6个) head/get/post/put/patch/delete 2. requests.head(url, **kwargs) 3. requests.get(url, params=None, **kwargs) # params # 字典或者字节序列 4. requests.post(url, data=None , json=None, **kwargs) # data # 字典字节序列或者文件,Rquest的内容 # json # json格式的数据,Request的内容 5. requests.put(url, data=None, **kwargs) #data # 字典字节序列或者文件,Rquest的内容 6. requests.patch(url, data=None, **kwargs) #data # 字典字节序列或者文件,Rquest的内容 7. requests.delete(url, *kwargs) 8. requests.options(url) # Preflighted Requests是CORS中一种透明服务器验证机制。 # 预检请求首先需要向另外一个域名的资源发送一个 HTTP OPTIONS 请求头,其目的就是为了判断实际发送的请求是否是安全的。 # 跨域资源共享(CORS) 是一种机制
""" 1. params # 字典或者字节序列 2. data # 字典字节序列或者文件,Rquest的内容 3. json # json格式的数据,Request的内容 4. headers # 字典,HTTP定制头 5. cookies # 字典或者cookiejar,Request中的cookie 6. auth # 元组,支持HTTP认证功能 7. files # 字典类型,传输文件 #fs = {"files":open("文件名","rb")} #r = requests.request("POST", url, files=fs) 8. timeout # 设置超时时间,单位为秒 9. proxies #字典类型,设定代理服务器 #pxs = {"http":"ip地址1","https":"ip地址2"} 10. allow_redirect重定向开关 11. stream立即下载开关 12. verify认证ssl证书开关 # 访问危险网站 13. cert本地ssl证书路径 """
import requests """ GET请求 HTTP默认的请求方法就是GET * 没有请求体 * 数据必须在1K之内! * GET请求数据会暴露在浏览器的地址栏中 GET请求常用的操作: 1. 在浏览器的地址栏中直接给出URL,那么就一定是GET请求 2. 点击页面上的超链接也一定是GET请求 3. 提交表单时,表单默认使用GET请求,但可以设置为POST """ payload = {‘key1‘: ‘value1‘, ‘key2‘: ‘value2‘} r = requests.get("http://httpbin.org/get", params=payload) # params可变个数的
""" POST请求 (1). 数据不会出现在地址栏中 (2). 数据的大小没有上限 (3). 有请求体 (4). 请求体中如果存在中文,会使用URL编码! 注意: 1、对于登录来说,应该输错用户名或密码然后分析抓包流程,用脑子想一想,输对了浏览器就跳转了,还分析个毛线,累死你也找不到包 2、要做登录的时候一定记得要把cookie先清除; 3、requests.session():中间的cookie都不用自己分析了,有用的没用的都给放进来了、 4、response.cookie.get_dict() #获取cookie """
import requests headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"} url = "http://www.baidu.com" response = requests.get(url=url, headers=headers) print(response) # <Response [200]> ret = response.request # <PreparedRequest [GET]> print(ret) ret = response.headers print(ret) ret = response.url print(ret) ret = response.status_code print(ret) ret = response.text # 返回是str类型的数据 print(ret) # Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问 response.text 之时,Requests 会使用其推测的文本编码。 # 你可以找出 Requests 使用了什么编码,并且能够使用 response.encoding 属性来改变它 ret = response.content # 返回是bytes类型的数据 print(ret) coo = response.cookies print(coo) # <RequestsCookieJar[<Cookie H_PS_PSSID=1420_21094_30495_22157 for .baidu.com/>, <Cookie delPer=0 for .baidu.com/>, <Cookie BDSVRTM=0 for www.baidu.com/>, <Cookie BD_HOME=0 for www.baidu.com/>]> coo = response.cookies.get_dict() print(coo) # {‘H_PS_PSSID‘: ‘1420_21094_30495_22157‘, ‘delPer‘: ‘0‘, ‘BDSVRTM‘: ‘0‘, ‘BD_HOME‘: ‘0‘} ret = response.json() print(ret) ret = response.encoding # 从http中猜测编码 # 还可以通过这个属性设置正确的编码 print(ret) # ISO-8859-1 ret = response.apparent_encoding # 从内容中分析出编码,这个更加准确 print(ret) # utf-8 ret = response.elapsed # 流逝了多少时间 print(ret) ret = response.history # [<Response [302]>] print(ret) # 默认情况下,除了request.head(), Requests 会自动处理所有重定向。可以使用响应对象的 history 方法来追踪重定向。 # Response.history 是一个 Response 对象的列表,为了完成请求而创建了这些对象。这个对象列表按照从最老到最近的请求进行排序。 # 重定向:浏览器发送请求,服务器返回重定向的状态码和location,没有响应体。浏览器会自动再发送给location的url一次请求,才能得到响应体。 # Request URL: https://static.zhihu.com/heifetz/main.app.585bb6255dc0a63109f3.js # Referer: https://www.zhihu.com/signin?next=%2F # 从哪个网页过来的(去请求js) # Location:https://www.zhihu.com/signin?next=%2F # 重定向到这个url
原文:https://www.cnblogs.com/yzg-14/p/12190146.html