介绍首先让我们来看 官方的介绍Requests is an elegant and simple HTTP library for Python, built for human beings.翻成过来意思是: 是给人类所撰写的一个具备优雅特性且呈现简单状态的 HTTP 库。如今这段介绍已经足够直白明显 , 那就让我们首先率先去领略一番其威势力量。import requests # 发送请求 response requests.get(urlhttp://www.baidu.com/s, params{wd:python}) # 处理响应 print(response.status_code) # 输出结果 200这个请求如果用 来实现代码如下import urllib.parse import urllib.request url http://www.baidu.com/s params urllib.parse.urlencode({wd:python}) # 发送请求 response urllib.request.urlopen(?.join([url, params])) # 处理响应 print(response.getcode()) # 输出结果 200就从感官方面而言, 是能够瞧出来的, 运用起来, 于URL、参数等层面会繁杂一些。这仅仅只是冰山一角罢了, 在实际运用进程当中, 还存有好多层面超出, 它并非是徒有虚名, 在接下来的学习期间, 你便会体会到。安装使用pip命令$ pip3 install requests或者也可以使用 命令安装$ easy_install requests发送请求使用 发送网络请求非常简单。我们首先需要导入 模块import requests而后, 我们能够试着去获取某一网页。在这个例子当中, 我们要把那公共时间线来进行获取标点符号:r requests.get(https://api.github.com/events)当下, 存在一个名为r的对象, 凭借这个对象, 能够获取一切我们所期望的信息。容易操作的 API 表明所有 HTTP 请求种类都是一目了然的, 比如说, 你能够像这样去发送一个 HTTP POST 请求:r requests.post(http://httpbin.org/post, data {key:value})轻易, 是不是? 那另外的HTTP请求类别, 为PUT, , HEAD以及 又是咋办? 全都是同样的简便:r requests.put(http://httpbin.org/put, data {key:value}) r requests.delete(http://httpbin.org/delete) r requests.head(http://httpbin.org/get) r requests.options(http://httpbin.org/get)传递参数在我们发送请求之际, 常常得向服务端发送请求参数, 一般而言参数都是以键与值相对的那种形式放置到URL里头, 是跟于一个问号过后的。比如, /get?keyval。 准许你运用关键字参数, 借由一个字符串字典去提供这些参数。举个例子, 要是你想把key1及key2传递到 /get , 那么你能够采用像下面这样的代码: 。payload {key1: value1, key2: value2} r requests.get(http://httpbin.org/get, paramspayload) print(r.url) # 输出结果 http://httpbin.org/get?key1value1key2value2通过打印输出该 URL你能看到 URL 已被正确编码。需留意, 字典之中, 那些值为 None 的键, 皆不会被增添至 URL 的查询字符串之内。你还可以将一个列表作为值传入payload {key1: value1, key2: [value2, value3]} r requests.get(http://httpbin.org/get, paramspayload) # 输出结果 http://httpbin.org/get?key1value1key2value2key2value3响应内容举个例子, 就比如说以请求百度首页为例子来讲在这种情况下, 我们能够凭借返回去读取服务器响应的内容来达成某些事情。import requests r requests.get(http://www.baidu.com) print(r.text) #返回太多只显示一部分它能够自动进行解码, 针对来自服务器的内容来开展, 大多数字符集是可以被它无缝地予以解码的。在请求被发出之后, 会依据HTTP头部针对响应的编码得出有凭借的推测。当你去访问r.text的时候, 会运用其所推测出的文本编码。你能够借助r.去获取所使用的编码:r.encoding # 输出结果 utf-8并且能够使用 r. 属性来改变它r.encoding ISO-8859-1假设存在这样一种情况, 即要是你把编码进行了改变, 那么在每一次你去访问 r.text 的时候, 就都会去使用 r 的新值。二进制响应内容就非文本请求而言, 比如说那种图片请求, 你同样能够以字节这一形式去访问请求响应体。并且, 它还会自动地为你去解码gzip以及传输编码的响应数据。比如, 凭借要求回报的二进制数据去构建一幅图片, 你能够运用像下面这样的代码:import requests from PIL import Image from io import BytesIO r requests.get(http://img.sccnn.com/bimg/326/203.jpg) print(r.content) bi BytesIO(r.content) print(bi) i Image.open(bi) print(i) # 输出结果 b\xff\xd8\xff\xe0\x00\x10JFIF\x00\... _io.BytesIO object at 0x1112fdbf8JSON 响应内容里头存在着一个被设立于内部的JSON解码器装置在里边, 它能够给予援手帮你去处理那与JSON有关的数据材料:r requests.get(https://api.github.com/events) print(r.json()) # 输出结果 [{urepository: {uopen_issues: 0, uurl: https://github.com/...要是 JSON 解码遭遇失败这种情形, 那么 r.json() 便会抛出一个异常。r requests.get(https://www.baidu.com) print(r.json()) # 输出结果 json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)要留意的是, 成功调用 r.json() 并不表明响应是成功的 , 有的服务器会在失败的响应里包含一个 JSON 对象 , 像是 HTTP 500 的错误细节 , 这种 JSON 会被解码返回 , 要检查请求是否成功 , 请使用 r.() 或者检查 r. 是否与你的期望一致 , 标点符号请确保。原始响应内容在极少的情形之下, 你或许会打算去获取源于服务器的原始套接字回应, 那么你能够去访问r.raw。在这个时候要保证在初始请求当中设置了 True。具体而言你能够如此去做: 。r requests.get(https://api.github.com/events, streamTrue) print(r.raw) print(r.raw.read(10)) # 输出结果 \x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03设置请求头要是你在开展爬取某一页面内容的行为之际, 发觉所获取的数据呈现为空的状态, 然而经由浏览器直接去访问URL却并无问题, 在这种时候极有可能是你被服务器认定为爬虫用户了, 该怎么办才好呢? 我们理应去模拟浏览器进行请求, 在这个时候你需要针对请求增添HTTP头部信息, 仅仅只需简单地把一个dict传递给参数便可以达成了。例如我们设置一下 User-Agent url http://www.baidu.com headers {User-Agent: myagent/2.21.0} r requests.get(url, headersheaders) print(r.request.headers) # 输出结果 {User-Agent: myagent/2.21.0, Accept-Encoding: gzip, deflate, Accept: */*, Connection: keep-alive}能够瞧见, 所请求的 User - Agent, 已然转变成为所设置的 /2.21.0 了。复杂的 POST 请求每当我们运用那种 POST 请求之际, 去打印一回 r.text 的话, 就会发觉每一回都会呈现出几个关键字: 。{ args: {}, data: , files: {}, form: {}, headers: {}, json: null, origin: 221.232.172.222, 221.232.172.222, url: https://httpbin.org/post }在POST的参数里头能够设置这些关键字, 其中, 和args先前我们已然讲过, 它们分别代表请求头以及参数信息, 是指请求的路由ip, url是我们所请求的url, 其馀几个我们是能够进行设置的, 接下来我们就要瞧瞧其他几个关键字如何展开设置。设置data参数要是你于POST请求之际打算提交表单, 同样仅仅只需简便地递送一个字典给data参数就行。你那个数据字典在发起请求之时会自行编码成为表单样式:payload {key1: value1, key2: value2} r requests.post(http://httpbin.org/post, datapayload) print(r.text) # 输出结果 { ... form: { key1: value1, key2: value2 }, ... }对于那 data 参数, 你同样能够去传入一个元组所构成的列表, 它就将会被自动地转换为一个列表。payload ((key1, value1), (key1, value2)) r requests.post(http://httpbin.org/post, datapayload) print(r.text) # 输出结果 { ... form: { key1: [ value1, value2 ] }, ... }设置 json 参数许可你运用json径直传送参数, 接着它便会被自行编码。payload {some: data} r requests.post(http://httpbin.org/post, jsonpayload) print(r.text) # 输出结果 { args: {}, data: {\some\: \data\}, files: {}, form: {}, headers: { Accept: */*, Accept-Encoding: gzip, deflate, Content-Length: 16, Content-Type: application/json, Host: httpbin.org, User-Agent: python-requests/2.21.0 }, json: { some: data }, origin: 221.232.172.222, 221.232.172.222, url: https://httpbin.org/post }留意, 在此处, 不但对json进行了赋值操作, 并且还自动给予data赋值, json内部的键值对也被自动编码到data里了。设置文件参数上传文件很简单files {file: open(test.txt, rb)} r requests.post(http://httpbin.org/post, filesfiles) print(r.text) # 输出结果 { ... files: { file: this is a file test }, ... }你也可以增加一个参数把字符串发送到上传的文件中例如files {file: (test.txt, some,data,to,send\nanother,row,to,send\n)} r requests.post(http://httpbin.org/post, filesfiles) print(r.text) # 输出结果 { ... files: { file: some,data,to,send\nanother,row,to,send\n }, ... }响应状态码和响应头我们能够从服务器回应的成果里面取得状态码以及响应头的资讯, 举例来说:r requests.get(http://httpbin.org/get) print(r.status_code) # 输出结果 200为方便引用还附带了一个内置的状态码查询对象print(r.status_code requests.codes.ok) # 输出结果 True我们还可以查看响应的响应头信息r requests.get(http://httpbin.org/get) print(r.headers) # 输出结果 {Access-Control-Allow-Credentials: true, Access-Control-Allow-Origin: *, Content-Encoding: gzip, Content-Type: application/json, Date: Wed, 18 Sep 2019 12:22:06 GMT, Referrer-Policy: no-referrer-when-downgrade, Server: nginx, X-Content-Type-Options: nosniff, X-Frame-Options: DENY, X-XSS-Protection: 1; modeblock, Content-Length: 183, Connection: keep-alive}要获取响应头的某个字段值我们可以这样print(r.headers[Content-Encoding]) # 输出结果 gzip如果一个响应中包含了 那么我们可以利用 变量来拿到:url http://example.com/some/cookie/setting/url r requests.get(url) r.cookies[example_cookie_name] # 输出结果 example_cookie_value以上所呈现出的程序, 仅仅只是属于样例范畴, 于运行该程序的情况下并不将会收获所得下文之反馈返回内容, 是需要包含着何种具体内容的响应才能够得以收获到的呢。另外可以利用 变量来向服务器发送 信息cookies dict(cookies_areworking) r requests.get(http://httpbin.org/cookies, cookiescookies) print(r.text) # 输出结果 { cookies: { cookies_are: working } }可以看到我们设置 参数后返回中就包含了我们设置的信息。为其设置不同的那些, 此所涉返回对象是这样一种情况, 它跟字典相仿具有那种适用性特质, 适宜于跨越域名以及跨越路径去运用的, 这就表明, 我们能够针对不一样的域名或者路径来进行相关设置的。你还能够将Jar传送至其中去呀:jar requests.cookies.RequestsCookieJar() #为路径/cookies设置cookie jar.set(tasty_cookie, yum, domainhttpbin.org, path/cookies) #为路径/elsewhere设置cookie jar.set(gross_cookie, blech, domainhttpbin.org, path/elsewhere) #请求路径为/cookies的URL url http://httpbin.org/cookies r requests.get(url, cookiesjar) print(r.text) # 输出结果 { cookies: { tasty_cookie: yum } }重定向与请求历史在默认情形之下, 除去 HEAD 请求之外, 会对所有重定向进行自动处理。可以使用响应对象的 方法来追踪重定向。它是一个对象的列表, 此对象列表依据从最老到最近的请求开展排序。例如 将所有的 HTTP 请求重定向到 HTTPSr requests.get(http://github.com) print(r.url) print(r.status_code) print(r.history) # 输出结果 https://github.com/ 200 []要是你运用的电脑是Mac, 当运行这段代码时出现报错, 即“: reset by peer”, 那你就得对你系统进行升级, 具体办法自行去百度搜索关键词“mac 更新”, 在更新好后就不会再呈现报错的情况了。我们还可以通过 参数禁用重定向处理r requests.get(http://github.com, allow_redirectsFalse) print(r.status_code) print(r.history) # 输出结果 301 []超时你能够借由进行设置, 把参数予以确定, 从而去告知, 在历经了借助该参数所设定的秒数时间过后, 停下用于等待回应所用的行为。requests.get(http://github.com, timeout0.001) # 输出结果 requests.exceptions.ConnectTimeout: HTTPConnectionPool(hostgithub.com, port80): Max retries exceeded with url: / (Caused by ConnectTimeoutError(, Connection to github.com timed out. (connect timeout0.001)))这里因设置极短超时时间致使请求停下等待响应, 进而引发报错, 要注意, 这仅对连接过程起作用, 和响应体的下载并无关联, 并非是整个下载响应的时间限定, 而是倘若服务器在特定秒数内未作出应答, 便会引发一个异常。
企业数字化 ERP 产品动态
相关推荐
AI金相分析技术:计算机视觉在材料检测中的应用 1. 项目背景与行业痛点金相显微镜作为材料科学领域的"眼睛",在金属材料分析、失效分析、质量控制等环节扮演着关键角色。传统金相分析流程中,操作人员需要手动调节显微镜、拍摄图像、标注特征、计算参数,整个过程耗时耗力且存在主观… · 2026/10/27 13:18:20
YOLOv8在海洋生物监测中的实践与优化 1. 项目背景与核心价值海洋生物监测一直是生态研究和渔业管理的重要课题。传统的人工观测方式不仅效率低下,而且受限于观察者的专业水平和环境条件。我在参与某海洋保护区监测项目时,曾亲眼见证研究人员需要花费数小时回放水下摄像机 footage,… · 2026/10/23 5:19:28
黄冈哪有电工证报考怎么报名 5分钟搞懂外省证书转移和考试流程 黄冈哪有电工证报考怎么报名 5分钟搞懂外省证书转移和考试流程 之前考的证在外省能不能转过来?你不是一个人。去年就有个安阳的学员老张,他2018年在河南郑州考的低压电工证,现在在黄冈做工地电工,因为证书不在本地,被项目方质疑资质,差点丢了饭碗… · 2026/11/14 4:46:16
电工证复审考题库怎么用?郑州报考避坑指南全解析 电工证复审考题库怎么用?郑州报考避坑指南全解析 之前考的证在外省能不能转过来?这个问题几乎每个准备报考或者正在复审电工证的朋友都问过。其实,电工证复审考题库的全国通用性,关键不在于“转”不“转”,而在于你是不是通过正规渠道拿到了“国家安全生… · 2026/11/14 4:46:16
海底捞电工证怎样考到期换证流程网上查询全攻略 海底捞电工证怎样考到期换证流程网上查询全攻略 证书过期了不知道怎么复审延期?这事儿我太懂了,我自己就是信阳浉河区市政公用工程的电工,手上有一本低压电工证,差点因为不知道网上查询复审流程,耽误了公司项目。今天我就从头到尾给你讲清楚海底捞电工证… · 2026/11/14 4:46:16
测量算不算特种工?电子证书怎么考不踩坑 测量算不算特种工?电子证书怎么考不踩坑 怕考不过白交培训费?你不是一个人。很多人在报名前都担心, 测量算不算特种工 ,能不能考?考了之后有没有用?能不能拿到 电子证书 ?这些问题其实很现实,但一旦弄清楚,报名就没那么可怕了。… · 2026/11/14 4:46:16
怎么申请电工证的补贴证怎么转异地 电工证怎么申请补贴 内部消息告诉你实操考试别怕挂 实操考试心里没底怕挂科?你不是一个人在战斗,这是很多初次报考电工证的学员都绕不开的坎。尤其在洛阳涧西区这种工业基础扎实但竞争激烈的地方,电工证不仅是就业门槛,更是一把打开高薪岗位的钥匙。如果… · 2026/11/14 4:46:16
电工证低压证好考吗郑州报考避坑指南 电工证低压证好考吗郑州报考避坑指南 工地太忙根本没时间复习考试,这几乎是每个建筑工地上电工的共同困扰。特别是像郑州这样的城市,项目多、工期紧,很多人连抽时间复习考证都成了奢望。但 电工证低压证好考吗… · 2026/11/14 4:45:15
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/13 22:30:50
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/13 5:40:45
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/12 23:27:43
有初级电工证怎么工作 2026河南最新政策怎么应对 有初级电工证怎么工作 2026河南最新政策怎么应对 之前考的证在外省能不能转过来?这个问题我每天被问上百次。2026年河南最新政策对证书跨省转移有了明确说明,特别是南阳市的从业者,需要特别关注。… · 2026/11/14 0:00:31
电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略 电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略 证书过期了不知道怎么复审延期?很多人遇到这种情况,要么是工作太忙没时间处理,要么是不知道具体流程,导致证书失效,影响工作和项目进展。其实复审并不难,关键是要找准官方报名入口,掌… · 2026/11/14 0:00:31
为什么要低压电工证实操考试考什么 为什么低压电工证值不值得考?别再被中介骗了 你是不是也经常看到网上有人在问“低压电工证到底值不值得考”?或者在找报名点时,担心被中间人骗钱?这些问题,我懂,我也经历过。作为一名在应急管理行业摸爬滚打多年的从业者,我深知低压电工证不仅是一个从… · 2026/11/14 0:00:31
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:12:21
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:11:51
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 22:31:30