✨前言
Requests是一个简单的PythonHTTP库,相对于其他PythonHTTP库,requests库更加建议上手,本文将指导您掌握requests库以快速起步,咱们现在就开始吧!
✨Part Ⅰ:在终端中安装requests库
requests库的安装极为简单,您可以直接在终端中输入如下命令:
pip install requests
如果您在安装过程中出现了报错,请阅读这篇文章Python安装第三方库时的报错处理_python安装第三方库报错_Mike0010的博客-CSDN博客
✨Part Ⅱ:requests起步
为了熟悉requests库中的关键字和语法,我们将在终端(Python终端解释器)中进行编译!
🔜1、提出URL请求
在requests库的帮助下,提出url请求非常简单。首先,请先在解释器中使用import导入requests库,代码如下:
import requests
接下来,我们来用一个实例了解GET请求类型。
r = requests.get('https://api.github.com/events')
如果您使用了一些第三方编辑器,您应该可以从调试信息中看到类似于下图的内容:
可见,url的响应结果代码为200,这表示url的请求已经成功,我们可以尝试将它输出,如下:
>>> r.status_code
output:
200
对于其他的HTTP请求方式,语法如下:
r = requests.post('https://httpbin.org/post', data={'key': 'value'})
r = requests.put('https://httpbin.org/put', data={'key': 'value'})
r = requests.delete('https://httpbin.org/delete')
r = requests.head('https://httpbin.org/get')
r = requests.options('https://httpbin.org/get')
一些HTTP请求方法解释:
🟢get 方法:发送一个请求来取得服务器上的某一资源。
🟢post 方法:向url指定的资源提交数据或附加新的数据。
🔴put 方法:put方法跟post方法很像,也是向服务器提交数据,但是put方法指向了资源在服务器上的位置,而post方法没有。
🔴head 方法:只请求页面的首部。
🔴delete 方法:删除服务器上的某资源。
🔴options 方法:options方法用于获取当前url所支持的方法。如果请求成功,会有一个allow的头包含类似get、post这样的信息。
🟢在编译过程中,最为常用的请求方式为get方法和post方法。
🔜2、向URL中传递参数
如果您希望在 URL 的查询字符串URL中发送某种数据,此数据将作为键/值对给出 URL 中的问号后配对。示例如下:
>>> dictionary = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=dictionary)
>>> print(r.url)
output:
https://httpbin.org/get?key1=value1&key2=value2
如输出所示,返回的URL已变为修改的查询URL。同时,您也可以将列表传递到URL中,例如:
>>> dictionary = {'key1': 'value1', 'key2': ['value2', 'value3']}
>>> r = requests.get('https://httpbin.org/get', params=dictionary)
>>> print(r.url)
output:
https://httpbin.org/get?key1=value1&key2=value2&key2=value3
🔜3、响应URL内容
在向URL提出请求后,我们就可以获取URL的响应内容了,如下:
>>> import requests
>>> r = requests.get('https://api.github.com/events')
>>> r.text
output:
'[{"id":"30031374468","type":"DeleteEvent","actor":{"id":106294860,"login":"aquaproj-aqua-registry[bot]","display_login":"aquaproj-aqua-registry","gravatar_id":"","url":"https://api.github.com/users/aquaproj-aqua-registry[bot]","avatar_url":"https://avatars.githubusercontent.com/u/106294860?"},"repo":{"id":402281482,"name":"aquaproj/aqua-registry","url":"https://api.github.com/repos/aquaproj/aqua-registry"}
......
如输出所示,GET请求将自动解码来自服务器响应的内容。那么如何返回二进制的URL内容呢?我们可以使用关键字content,如下所示:
>>> r.content
output:
b'[{"repository":{"open_issues":0,"url":"https://github.com/......
如果您需要返回json格式,可以使用内置的json解码器进行解码,如下所示:
>>> r.json()
output:
[{'repository': {'open_issues': 0, 'url': 'https://github.com/......
若您需要知道URL响应编码(encoding),您可以输入如下命令:
>>> r.encoding
output:
'utf-8'
若您需要URL的原始返回内容(一般用于流式传输),您需要设置rawstream=True,可输入如下命令:
>>> r = requests.get('https://api.github.com/events', stream=True)
>>> r.raw
output;
<urllib3.response.HTTPResponse object at 0x101194810>
>>> r.raw.read(10)
output:
b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
🔜4、向URL发送多部分编码文件
在有些API中,允许您发送编码文件,例如xls或csv文件等等。若要发送分段编码文件,您可以输入如下代码:
>>> url = 'https://httpbin.org/post'
>>> files = {'file': open('report.xls', 'rb')}
>>> r = requests.post(url, files=files)
>>> r.text
output:
{
...
"files": {
"file": "<censored...binary...data>"
},
...
}
如果要发送要作为文件接收的字符串,您可以输入如下命令:
>>> url = 'https://httpbin.org/post'
>>> files = {'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')}
>>> r = requests.post(url, files=files)
>>> r.text
output:
{
...
"files": {
"file": "some,data,to,send\\nanother,row,to,send\\n"
},
...
}
🔜5、响应Cookie和历史记录(重定向)
若您的URL响应中包含cookie,您可以快速地访问它们,例如:
>>> url = 'http://example.com/some/cookie/setting/url'
>>> r = requests.get(url)
>>> r.cookies['example_cookie_name']
output:
'example_cookie_value'
如果要发送cookie,可以使用类似于如下地代码:
>>> url = 'https://httpbin.org/cookies'
>>> cookies = dict(cookies_are='working')
>>> r = requests.get(url, cookies=cookies)
>>> r.text
output:
'{"cookies": {"cookies_are": "working"}}'
若您需要cookie的多个域或路径,可以使用类似于如下地代码:
>>> jar = requests.cookies.RequestsCookieJar()
>>> jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
>>> jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')
>>> url = 'https://httpbin.org/cookies'
>>> r = requests.get(url, cookies=jar)
>>> r.text
output:
'{"cookies": {"tasty_cookie": "yum"}}'
若要查询访问URL的历史记录且请求方式不为head,可将重定向处理设置为False,例如输入如下命令:
>>> r = requests.get('http://github.com/', allow_redirects=False)
>>> r.status_code
output:
301
>>> r.history
output:
[]
若要查询访问URL的历史记录且请求方式为head,可将重定向处理设置为True,例如输入如下命令:
>>> r = requests.head('http://github.com/', allow_redirects=True)
>>> r.url
output:
'https://github.com/'
>>> r.history
output:
[<Response [301]>]
🔜6、超时
您可以告诉请求在给定数量的响应后停止等待响应秒与参数。几乎所有生产代码都应该使用几乎所有请求中都有此参数。如果不这样做,可能会导致程序无限期挂起,可输入如下命令:
>>> requests.get('https://github.com/', timeout=0.001)
output:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001)
✨最后
🎉恭喜您已经对requests库有了基础的认识,可以为requests的进阶学习做好准备和基础!