IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 爬虫:Requests高级用法 -> 正文阅读

[网络协议]爬虫:Requests高级用法

目录

1、文件上传

2、Cookies

cookies的遍历解析

构造cookies

3、会话维持

4、SSL证书认证

一、忽略警告

二、捕获警告到日志的方式或略告警

三、指定对应的客户端证书

5、代理的设置

HTTP Basic Auth处理

使用SOCKS协议处理

6、超时设置

7、身份认证

OAuth认证

8、Prepared Request


了解了 requests 基本用法 ,如基本的 GET, POST 请求以及 Response 对象,我们再了解下 requests 些高级用法,如文件上传、 Cookies 设置 代理设置等

1、文件上传

requests 可以模拟提交一些数据, 假如有的网站需要上传文件,我们也可以用它来实现, 这非常简单

import requests

files = {
    "files": open("favicon.ico","rb")
}

response = requests.post("http://192.168.1.104/post",files=files)
print(response.text)

结果:
{
  "args": {}, 
  "data": "", 
  "files": {
    "files": "data:application/octet-stream;base64,AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ZQBg/2cAv/9lAP7/ZgD//2YA//9mAf//ZgD//2YA//9mAP//ZgD//2YA//9mAP//ZgD//2YA//9mAf7/ZgH//2YB//9lAP//ZgD//2YB/v9nAP7/agH//2sA//9sAe7/bwC//3EAXwAAAAAAAAAAAAAAAAAAAAD/YAAQ/2YAz/9lAP7/ZgD//2YA//9lAP7/ZgD//2YA//9mAP//ZgD//2YB/v9lAf7/ZgH//2UA//9mAf7/ZgH//2YA//9mAP//ZgH//2YA//9nAf//aAD//2kA//9rAP//bAD//24A//9wAP//cQD+/3QAv/9wABAAAAAAAAAAAP9lAb//ZQH+/2YA//9mAP//ZgH//2YA//9mAP//ZgD//2YA//9mAP//ZgD//2YA//9mAP//ZwH//2YA//9mAf7/ZgD//2YA//9mAP//ZwD//2gA/v9qAP//bAD//2wB/v9uAP//cAD//3IA//9zAP//dQD//3cAzwAAAAD/ZgBf/2YA//9mAP//ZgH+/2YA//9mAP//ZgH//2YA//9lAP7/ZgH//2YB/v9lAP7/ZgD//2UB/v9lAP7/ZgH+/2UB/v9mAP//ZgH//2cA//9pAP//agD//2wA//9uAP//bwD//3AA//9xAf7/dAD//3UA//92AP//eAH//3kAX/9nAL//ZQD//2YB//9mAP//ZgD//2YA//9mAP//ZgD//2UA/v9lAP7/ZgD//2YA//9mAf//ZgD//2YA//9mAP//ZgH//2cB//9nAP//aQD//2sA//9sAP//bgH//28B/v9wAP7/cgH//3MA//91AP7/dgD//3gA//95AP7/ewC//2YB7v9mAf//ZgD//2UA/v9mAf//jUD//59g//+MQP//ZgD//2UA/v9lAf7/ZgH//2YA//9lAP7/ZgD//2UA/v9mAf7/aAD//2kA//9rAP//bAH+/20A/v9vAP//cQH+/3MA//9zAf7/dQD+/3YA//95AP//egD//3sB/v99Af//ZgD//2YB/v9lAP//ZgD//2UA/v+gYP//9e/Yv///eSD+/2YA//9mAP//ZgH//2UA/v9mAf//xaD//2gA//9qAf//awD//2wB/v/JoP//lED//3EA//9zAP//dAD//3YB//93AP//eAD+/3oA//97AP//fQH+/38A//9lAP7/ZgH//2YA//9mAP//ZgD//2YA//+CMP//9e/s3///ZgD//2YB/v9lAP7/ZgD//6lwcxD//2wA//9tAP//bgD///bvwpD//30R//91Af7/eAD//3kA//96AP7/fAH//30B/v+AAf//gAD//2YA//9mAP7/ZgD//2YA//9mAP//ZgD//2YA//+fYP+zgP7/ZQH+/2YA//96If//9e9+IP//pGD//3wA/v9+Af//gAD//4AA/v+CAP7/ZQD+/2YA//9mAf//ZgH//2UA//9mAf//ZgH+/2YA///FoP///+zf//95IP//ZwD//9m/2r///20B//+lYP//l0D//9WvfgD//4AB//+AAf7/ggD+/4QB//9mAP//ZgD//2YA//9mAP//ZgD//2YA//9mAf//ZgH+/3gh/v///6Fg//+scP7///bv//+AIP7/bwD+/6Zg3L///3UA//92Af7/eAD//3oA//+LIP+AAP//gQH+/4IB/v+EAP//hQD//2YA//9mAP//ZQD+/2YB//9nAf//ZgD//2UB/v9mAP//ZgD//8ag2r///+zfrnD//3AA//9xAP//p2Ddv///dwD+/3kA//95Af7/fAD//40h/v///4IA//+DAP//hQD//4YA//+IAP//ZgH+/2YA//9mAP//ZgD//2YA//9mAf//ZQD+/2YA//9nAP//jkD+///27///fyD//8CQ//9wAP//cQH+/3MA//+oYP///96///95AP//egD+/3wB//9+Af//jyD/gwD//4UA//+HAf//iAH//4kA//9mAf7/ZgD//2YA//9mAP//ZgH//2YA//9mAP//ZgD+/2gB/v9qAP//9u+JMf7/cAH//3EA//9zAP//dAH+/6lg3r///3sB//99Af//fQD+/38A//+RIf7///+FAf//hwH//4gB/v+KAP//igH+/2YB//9mAf7/ZgH+/2YA//9mAf//cBD//3oh/v97IP7/fSD//34g///kz51Q//9xAf7/cwD//3UA//92AP//q2H+///ev///fQD//34A//9/AP//gAH+/5Ig/4cA//+JAf//iQD+/4sA/v+NAf7/ZgD//2YB//9mAf7/ZgD//2YB/v+9kP///+7f//+tYP7//9+///9+Af//gAH+/4EA//+DAP//lCD/iQH//4oB//+MAf//jgH//48A//9mAP//ZgH//2YB/v9mAP//aAD//3wg///av///7N///+3f///t3///9u/37///7t///+7f///v3///zp///61g37///4AB//+BAP//gwD//4QA/v+VIP+LAf//jAD//44B//+PAP//kQD+/2YB//9mAP//ZwD//2kA//9pAP//awD//20B//9uAP7/cAD//3EA//+5gP///8uf//93AP//eQH//3oA/v97AP//rmDgv///ggD//4MB/v+FAP//hgH+/5ch/v///4wA/v+OAP//jwD//5EA//+TAf7/ZgD//2cA//9pAf//agD//2wA//9tAP//bwD//3AA//9yAP//cwD//7mAzJ///3kA//97Af//fAD//34A//+vYP///+C///+EAP//hQD//4cA//+HAf7/mCD/jwD//5AA/v+RAf//kwH+/5QA//9nAP//aQH//2oB/v9sAf7/bQD//5tQ//+vcP7/ehH+/3QB//91AP//uoDNn///ewD//3wB/v9+AP//gAD//7Bh4L///4UA//+HAP7/iAD//4oB/v+aIP+QAP//kgD//5MA//+UAP//lwD+/2kA//9qAP//bAD//20A//9vAP//lEDu3///hyD//3cB//+8gP///86f//98AP//fgD//4AA//+BAP//sWDgv///iAH//4kA//+KAP//jAH//5sg/5IB//+TAf//lQD//5cB/v+YAP//agD+/20B//9uAf//cAH//3EA//9yAP//3L/DkP//eAH+/7yAz5///34A//+AAf//gQD//4MB/v+yYP///+G///+JAf//igD//4wA//+OAP//nSD/lAH//5UA//+XAf7/mAD//5oA//9sAf7/bgH+/3AA//9xAP//cwD//3QA/v+pYPfv///ev///79/37///37///9+fv///s2D//7Nh9+///+Gjv///47///+Ojv/+VAP//lwD+/5gA//+aAP//mwD//24A//9wAP//cQD//3MA/v91AP//dgD//4gg//+0YP//tGD//5gA/v+ZAf//mgD//5wA//+eAf//cQD//3EB/v9zAP//dQD//3YA//94AP//eQH+/9avx5D//6BA/v+hQP//oUD//6NA/v+kQP//pUD//4kB//+REf//qUD//6pA//+rQP//rED//61A//+uQP//r0D//7BA//+yQP//mQD//5sA/v+cAf//ngD+/58A//9yAP//dAH//3UA//92AP//eAH+/3kA/v97Af//rWDnz///gQD//4IA//+FAf//hgH//4cA/v+JAP//igD+/4wA//+NAP//jwD//5AA//+SAf7/kwD//5YB/v+WAP//mAD//5oA/v+bAP//nQH//54A/v+fAP//oQD//3QA//91Af//dwD//3gA//96Af//ewD//30A//9/AP//t3D///fv//+TIP7/hAD//4UA//+HAP//iAD+/4sA//+MAf//jQD//48A//+RAf//kgH//5QA//+VAP//lwH+/5gB/v+aAP//mwH//50B//+eAP//oAD+/6EA//+jAO//dwG//3cA//95AP//egH+/3sA//99AP//fwD//4AA//+CAf//hAD//4UA//+GAP7/hwH+/4kA//+LAf7/jAD//44B/v+PAP//kQH+/5MA//+VAf7/lQD//5cA//+YAP//mgD//5wB//+dAP//nwH//6AA//+iAf//owH//6QAv/94AGD/eQH//3oA//98Af//fgH//4AA//+AAP//ggH//4MA//+FAP7/hgH//4gA//+KAP//iwH//40A//+OAP//kAD//5EA//+TAP//lQD//5YB/v+XAP//mQD//5sA/v+cAf7/nQH//58A//+gAP//ogH//6MA//+lAP//pgBfAAAAAP96Ac//fAD//34B/v+AAf//gQD//4IB//+DAf7/hgH//4YA/v+IAf7/igH+/4sB/v+NAP//jgD+/5AA/v+RAP//kwD+/5UA//+XAP7/lwD//5kA//+aAP//nAD//54B/v+fAP//oQD//6IB//+kAf7/pQD//6cAvwAAAAAAAAAA/4AAEP99AL//gAH+/4EA//+DAP//hAH+/4UA//+HAf//iQH//4oA//+LAP//jQH+/44A//+QAP//kgH+/5QA/v+UAP//lgD//5gA//+ZAP//mwD//5wA//+dAP//nwH//6EB//+iAf//owD//6UA//+nAM//nwAQAAAAAAAAAAAAAAAAAAAAAP+BAF//gwC//4QA7/+FAP7/hwD//4kB/v+KAP//jAD//40A//+QAf7/kAD//5IB//+UAf//lQD//5cA//+YAP//mgH+/5sA//+dAf7/ngD//58A//+hAP//owH//6QA//+lAL//pgBfAAAAAAAAAAAAAAAA4AAAB4AAAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAeAAAAc="
  }, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Connection": "keep-alive", 
    "Content-Length": "4434", 
    "Content-Type": "multipart/form-data; boundary=cc063f258f2e82b60255f44bada47474", 
    "Host": "192.168.1.104", 
    "User-Agent": "python-requests/2.25.1"
  }, 
  "json": null, 
  "origin": "192.168.1.101", 
  "url": "http://192.168.1.104/post"
}

这个网站会返回响应,里面包含 files 这个字段,而 form 字段是空的,这证明文件上传部分会单独有 files 字段来标识

2、Cookies

cookies的遍历解析

我们使用 urllib 处理过 Cookies ,写法比较复杂,而有了 requests ,获取和设置 Cookies 只需 一步即可完成

import requests

response = requests.get("https://www.baidu.com")
print(response.cookies)

for k ,v in response.cookies.items():
    print(k + "=" + v)


结果:
<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
BDORZ=27315

我们首先使用cookies属性即可成功访问得到Cookies,可以发现它是RequestCookieJar类型。然后利用items() 方法将其转化为元组组成的列表,遍历输出每一个Cookie的名称和值,实现Cookie的解析

cookies来维持登录状态

import requests
headers = {
    "Cookie":"_ga=GA1.2.210444144.1614871259; __yadk_uid=kclvKZEyAUioQUEwo5wVf6KKplYFPSD4; UM_distinctid=17cd355e7b48b4-09111d59bffd3f-2343360-149c48-17cd355e7b510b2; read_mode=day; default_font=font2; locale=zh-CN; Hm_lvt_0c0e9d9b1e7d617b3e6842e85b9fb068=1637886939,1638366539; CNZZDATA1279807957=790049501-1637882590-https%253A%252F%252Fwww.baidu.com%252F%7C1638363475; remember_user_token=W1sxOTYzMDMxMF0sIiQyYSQxMSREVlhyYjk4V3hObW5DcXlxc2ttVk91IiwiMTYzODM2NjYyOS4wNTMzMjU3Il0%3D--ff4af9ad6a9b380c9eb42304ea76cfb586975fbe; web_login_version=MTYzODM2NjYyOQ%3D%3D--e08fb63762e641cd33cdf770c9b6c79e367a584d; _m7e_session_core=8e24668a4178657ef5e1e07e0ae0a835; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2219630310%22%2C%22first_id%22%3A%22177f37746112a7-0c8ece00917a72-53e356a-1350728-177f3774612d3d%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%22177f37746112a7-0c8ece00917a72-53e356a-1350728-177f3774612d3d%22%7D; Hm_lpvt_0c0e9d9b1e7d617b3e6842e85b9fb068=1638366629",
    "Host": "www.jianshu.com",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}

response = requests.get("https://jianshu.com",headers=headers)
print(response.text)

构造cookies

也可以通过 cookies 参数来设置,不过这样就需要构造 RequestsCookieJar 对象,而且要分割一下 cookies 这相对烦琐,不过效果是相同的,

import requests.cookies

cookies = "_ga=GA1.2.2104443144.1614871259; __yadk_uid=kclvKZEyAUioQUEwo5wVf6KKplYFPSD4; UM_distinctid=17cd355e7b48b4-09111d59bffd3f-2343360-149c48-17cd355e7b510b2; read_mode=day; default_font=font2; locale=zh-CN; Hm_lvt_0c0e9d9b1e7d617b3e6842e85b9fb068=1637886939,1638366539; CNZZDATA1279807957=790049501-1637882590-https%253A%252F%252Fwww.baidu.com%252F%7C1638363475; remember_user_token=W1sxOTYzMDMxMF0sIiQyYSQxMSREVlhyYjk4V3hObW5DcXlxc2ttVk91IiwiMTYzODM2NjYyOS4wNTMzMjU3Il0%3D--ff4af9ad6a9b380c9eb42304ea76cfb586975fbe; web_login_version=MTYzODM2NjYyOQ%3D%3D--e08fb63762e641cd33cdf770c9b6c79e367a584d; _m7e_session_core=8e24668a4178657ef5e1e07e0ae0a835; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2219630310%22%2C%22first_id%22%3A%22177f37746112a7-0c8ece00917a72-53e356a-1350728-177f3774612d3d%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%22177f37746112a7-0c8ece00917a72-53e356a-1350728-177f3774612d3d%22%7D; Hm_lpvt_0c0e9d9b1e7d617b3e6842e85b9fb068=1638366629"
jar = requests.cookies.RequestsCookieJar()
headers = {
    "Host": "www.jianshu.com",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}

for cookie in cookies.split(";"):
    key,value = cookie.split("=",1)
    jar.set(key,value)

response = requests.get("https://jianshu.com",headers=headers,cookies=jar)
print(response.text)

首先新建了一个 RequestCookieJar 对象,然后将复制下来的 cookies 利用 split()方法分割,接着利用set()方法设置好每个Cookie的 key和 value ,然后通过调用 requests的get()方法并传递给 cookies 参数即可,当然,由于简书本身的限制, headers 参数也不能少,只不过不需要在原来 headers 参数里面设置 cookie 字段了

3、会话维持

在requests中,如果直接利用 get() 或 post()等方法的确可以做到模拟网页的请求,但是这实际 上是相当于不同的会话,也就是说相当于你用了两个浏览器打开了不同的页面;

设想这样一个场景,第一个请求利用 post()方法登录了某个网站,第二次想获取成功登录后的自己的个人信息,你又用了一次 get ()方法去请求个人信息页面 实际上,这相当于打开了两个浏览器, 是两个完全不同的会话,能成功获取个人信息吗?那当然不能

有小伙伴可能说了,我在两次请求时设置同样的 cookies不就行了?可以,但这样做起来显得很 烦琐, 我们有更简单的解决方法 其实解决这个问题的主要方法就是维持同 一个会话 也就是相当于打开 一个新的浏览器选项卡而不是新开 一个浏览器, 但是我又不想每次设置 cookies ,那该怎么办呢?这时候就有了新的利器一Session对象

import requests

requests.get('http://192.168.1.104/cookies/set/name/123456')
response = requests.get("http://192.168.1.104/cookies")
print(response.text)

结果:
{
  "cookies": {}
}

这里我请求了http://192.168.1.104/cookies/set/name/123456?这个网址设置Cookies,name=123456,而后又请求了获取当前的cookies,发现没有请求过来,用Session看下

import requests
r = requests.Session()
r.get('http://192.168.1.104/cookies/set/name/123456')
response = r.get("http://192.168.1.104/cookies")
print(response.text)

结果:
{
  "cookies": {
    "name": "123456"
  }
}

体会到同一个会话和不同会话区别了吧,利用 Session ,可以做到模拟同一个会话而不用担心 Cookies的问题, 它通常用于模拟登录成功之后再进行下一步的操作,Session 在平常用得非常广泛,可以用于模拟在一个浏览器中打开同一站点的不同页面

4、SSL证书认证

requests还提供了证书验证的功能 ,当发送 HTTP 请求的时候,它会检查 SSL 证书,我们可以使用 verify 参数控制是否检查此证书 其实如果不加verify参数的话,默认是True ,会自动验正。

当我们没有CA证书的时候,浏览器会提示

请求

import requests

response = requests.get("https://www.baidu.com/")
print(response.status_code)

结果:
requests.exceptions.SSLError:("bad handshake: Error([('SSL routines','tls_process_server_certificate','certificate verify faied')],)",)

这里提示?SSLError ,表示证书验证错误 ,所以如果请求一个HTTPS站点,但是证书验证错误的页面时,就会报这样的错误,那么如何避免这个错误呢?很简单,把verify参数设置为 False 即可?

import requests

response = requests.get("https://www.baidu.com/",verify=False )
print(response.status_code)

结果:
200

当我们verify=False,还是会报一个警告,建议给我们指定证书:可通过一下做法

一、忽略警告

import requests
from requests.packages import urllib3

urllib3.disable_warnings()
response = requests.get("https://www.baidu.com/",verify=False )
print(response.status_code)

二、捕获警告到日志的方式或略告警

import requests
import logging

logging.captureWarnings(True)
response = requests.get("https://www.baidu.com/",verify=False )
print(response.status_code)

三、指定对应的客户端证书

可以是单个文件(包含密钥和证书)或 一个包含两个文件路径的元组

import requests

response = requests.get("https://www.baidu.com/",cert=("/path/server.crt","/paht/key"))
print(response.status_code)

5、代理的设置

对于某些网站,在测试的时候请求几次, 能正常获取内容, 但是一旦开始大规模爬取,对于大规 模且频繁的请求,网站可能会弹出验证码,或者跳转到登录认证页面,更甚者可能会直接封禁客户端 ,导致一定时间段内无法访问

为了防止这种情况我们就需要代理来解决这个问题,使用proxies参数

import requests

proxess = {
    "http":"http://192.168.1.104:8989",
    "https":"https://192.168.1.104:8990"
}

response = requests.get("https://www.baidu.com",proxes=proxess)

注:自己本地的代理,可能无效

HTTP Basic Auth处理

若代理需要使用 HTTP Basic Auth ,可以使用类似:http://user:passwd@host:port 这样的语法来设置代理

import requests

proxess = {
    "http":"http://user:passwd@192.168.1.104:8989"
}

response = requests.get("https://www.baidu.com",proxes=proxess)

使用SOCKS协议处理

安装:pip install requests[socks]

import requests

proxess = {
    "http":"socks5://user:passwd@192.168.1.104:8989",
    "https":"socks5://user:passwd@192.168.1.104:8989"
}

response = requests.get("https://www.baidu.com",proxes=proxess)

6、超时设置

为了防止服务器不能即使响应,我们会增加一个超时时间,即超过这个时间还没有得到响应,就会报错。需要用到timeot参数

import requests

response = requests.get("https://www.taobao.com",timeout=1)
print(response.status_code)

结果:
200

这里我们将超过时间设置为1秒,超过一秒没有响应,就会抛出异常;这里时间包含两个阶段,即链接(connect)和 读取(read)

也可以分开指定两个时间,传入一个元组

import requests

response = requests.get("https://www.taobao.com",timeout=(5,11))
print(response.status_code)

结果:
200

?不想指定超时的话,可以不加这个参数,或者timeout=None

7、身份认证

有些网页我们可能会遇到这样的认证页面

?我们可以使用request自带的身份认证功能

import requests
from requests.auth import HTTPBasicAuth

response = requests.get("https://localhost:8080",auth=HTTPBasicAuth("username","passwd"))
print(response.status_code)

还可以直接给auth传递密码:

import requests


response = requests.get("https://localhost:8080",auth=("username","passwd"))
print(response.status_code)

OAuth认证

需要安装oauth包

pip install requests_oauthlib

使用OAuth认证的方法代码

import requests
from  requests_oauthlib import OAuth1

url = "https://lovslhost:8080/1.1/account/verify_credentials.json"
auth = OAuth1("YOUR_APP_KEY","YOUR_APP_SECRET",
              "USER_OAUTH_TOKEN","USER_OAUTH_TOKEN_SECRET")


requests.get(url=url,auth=auth)

8、Prepared Request

前面介绍urllib时,我们可以将请求表示为数据结构,其中各个参数都可以通过一个 Request对象来表示, 这在requests里同样可以做到,这个数据结构就叫 Prepared Request;

from requests import Request,Session

url = "http://192.168.1.104/post"
data = {
    "name": "germey"
}

headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}

s = Session()

req = Request("POST",url=url,headers=headers,data=data)
prep = s.prepare_request(req)
r =s.send(prep)
print(r.text)

结果:
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "name": "germey"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Connection": "keep-alive", 
    "Content-Length": "11", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "192.168.1.104", 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
  }, 
  "json": null, 
  "origin": "192.168.1.101", 
  "url": "http://192.168.1.104/post"
}

引入Request,然后用url,data和headers参数构造了一个Request对象,这时需要再调用Session和prepare_request() 方法将其转化为一个Prepared Reuqest对象,然后调用 send() 方法发送即可

有了 Request 这个对象,就可以将请求当作独立的对象来看待,这样在进行队列调度时会非常方便

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:35:32  更:2021-12-06 15:36:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/6 7:33:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码