【Python】Requests快速入门

✨前言

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的进阶学习做好准备和基础!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值