目录

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 requestsfiles = {"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 requestsresponse = 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.cookiescookies = "_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 requestsrequests.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 requestsresponse = 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 requestsresponse = requests.get("https://www.baidu.com/",verify=False )
print(response.status_code)结果:
200

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

一、忽略警告

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

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

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

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

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

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

5、代理的设置

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

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

import requestsproxess = {"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 requestsproxess = {"http":"http://user:passwd@192.168.1.104:8989"
}response = requests.get("https://www.baidu.com",proxes=proxess)

使用SOCKS协议处理

安装:pip install requests[socks]

import requestsproxess = {"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 requestsresponse = requests.get("https://www.taobao.com",timeout=1)
print(response.status_code)结果:
200

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

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

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

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

7、身份认证

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

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

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

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

import requestsresponse = 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 OAuth1url = "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,Sessionurl = "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 这个对象,就可以将请求当作独立的对象来看待,这样在进行队列调度时会非常方便

爬虫:Requests高级用法相关推荐

  1. 爬虫—Requests高级用法

    Requests高级用法 1.文件上传 我们知道requests可以模拟提交一些数据.假如有的网站需要上传文件,我们也可以用requests来实现. import requestsfiles = {' ...

  2. Python爬虫1.4 — requests高级用法教程

    Python爬虫1.4 - requests高级用法教程 综述 设置请求头(headers) 设置代理服务器IP(proxy) Cookies(Session) requests.Session() ...

  3. (转)python requests 高级用法 -- 包括SSL 证书错误的解决方案

    (转)python requests 高级用法 -- 包括SSL 证书错误的解决方案 参考文章: (1)(转)python requests 高级用法 -- 包括SSL 证书错误的解决方案 (2)ht ...

  4. 【Python爬虫系列教程 5-100】 Requests高级用法:文件上传,如何设置SSL证书验证、处理超时设置 、身份认证和代理设置

    文章目录 高级用法 文件上传 Cookies Session维持 SSL证书验证 超时设置 身份认证 代理设置 Prepared Request 高级用法 上篇,我们了解了requests的基本用法, ...

  5. python requests 高级用法

    转自 http://www.myvary.cn/index.php/2017/04/29/python-requests/ 高级用法 本篇文档涵盖了 Requests 的一些高级特性. 北上广深杭 交 ...

  6. python requests 动态加载_python requests 高级用法

    HTTP动词 Requests 提供了几乎所有HTTP动词的功能:GET.OPTIONS.HEAD.POST.PUT.PATCH.DELETE.以下内容为使用 Requests 中的这些动词以及 Gi ...

  7. requests高级用法

    会话对象 当你向同一主机发送多个请求时,session会重用底层的tcp连接,从而提升性能,同时session也会为所有请求保持 cookie. #!/usr/bin/env python # -*- ...

  8. Python爬虫4.4 — selenium高级用法教程

    Python爬虫4.4 - selenium高级用法教程 综述 Headless Chrome 设置请求头 设置代理IP 常用启动项参数options设置 Cookie操作 selenium设置coo ...

  9. requests高级部分 urllib简单介绍

    文章目录 1代理IP的使用 1.1使用代理IP演示: 2 requests高级用法 2.1 文件上传功能 2.2 cookie处理 2.3 会话维持与模拟登陆 2.4 SSL证书验证 2.5 代理设置 ...

最新文章

  1. 每一个开发人员都应该懂的 UML 规范
  2. SAP WM LT15不能取消二步法确认场景中只做过第一步确认的TO单
  3. python:xml模块用法-xml处理、修改、删除
  4. php图片等比例压缩,php实现图片上传并等比例压缩
  5. db_recovery_file_dest_size 修改大一点及删除归档日志 |转|
  6. Linux / openwrt / Ubuntu 18.04 虚拟机中的 openwrt 如何联网
  7. ByteArrayOutputStream和ByteArrayInputStream详解
  8. 《精通Windows Sockets网络开发--基于Visual C++实现》.(孙海民).[PDF]ckook
  9. .NET Core 3.0 新 JSON API - Utf8JsonWriter
  10. Mysql的MVCC是什么
  11. 关于在WinForm里用HttpWebRequest获得某个页面,并填写页面的textbox及点击button的方法...
  12. redhat kvm 虚拟机U盘不识别的解决办法
  13. 一文了解十大 Java 开发者必备测试框架!
  14. SQL SERVER IDENTITY 约束的用法
  15. php简化URL路径,thinkphp框架实现路由重定义简化url访问地址的方法分析
  16. MTV和MVC的区别
  17. 0框架前端-如何写一个按钮(button)
  18. IEEE Access模板caption无法换行
  19. Android APP微信第三方登录踩坑 - 微信开放平台修改应用包名后微信第三方登录失败
  20. selenium自动化中停止页面加载

热门文章

  1. MySQL审计之插件
  2. 关于计算机的总结-2018 Java
  3. Hadoop ViewFs允许hdfs schema的重载
  4. 基于Springboot人力资源管理系统设计
  5. 2021-03-19腾飞XXEachXX-00.00-N.009
  6. 解决Visio导出图片没有边界或者边缘留白过少的问题
  7. 系统优化软件度盘下载(含Advanced学习版)
  8. Word添加页眉的方法
  9. 银汇通分析中国POS机行业发展历程
  10. 电子优惠券平台基本流程图