焦小花同学

requests,Python世界里最友好的HTTP库!

点击

上方文字

关注我们

Requests,Python世界里最友好的HTTP库!

今天来聊聊requests这个库。它是干什么的呢?简单说,requests就是让我们可以用 Python 很轻松地跟网络上的服务沟通——就是发送 HTTP 请求,然后拿回响应。它的强大之处在于操作特别简单,但功能却很全。没用过的朋友可能觉得跟网络打交道很复杂,但有了requests,你会发现这事儿其实挺简单的。

1.

发送一个最简单的请求

先演示一下最基础的用法,咱们就发一个最简单的 GET 请求,也就是从一个网站上获取一些数据:

1import requests

3response = requests.get('https://jsonplaceholder.typicode.com/posts/1')

4print(response.text)

这里我们访问了一个假 API,获取了一条帖子的信息,然后用 response.text 打印出返回的内容。你会发现,返回的内容是 JSON 格式的数据。

温馨提示:requests.get() 是用来发送 GET 请求的,这个方法的返回值 response 就是服务器返回给我们的响应。response.text 是返回的内容,通常是 HTML、JSON 之类的文本。

2.

请求中的参数传递

有时候我们访问某些接口的时候,不是直接访问一个具体的 URL,而是需要传递一些参数,比如搜索内容、过滤条件等。requests 让你可以很方便地加上这些参数。我们用一个例子来看看:

1params = {'userId':1}

2response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)

3print(response.url)

4print(response.text)

这里我们通过 params 参数加上了一个用户 ID,这样就只获取这个用户的帖子。response.url 会显示最终生成的 URL,你可以通过它来检查请求是否正确。

温馨提示:查询参数就是 URL 中的 ?key=value 形式的东西,requests 会帮你自动把字典类型的参数转成这种格式,省去了手动拼接 URL 的麻烦。

3.

处理 POST 请求

除了 GET 请求,我们还会用到 POST 请求,比如提交表单、上传数据等等。requests 也支持 POST 请求,同样很简单。我们来看看怎么发一个 POST 请求:

1data = {'title':'foo', 'body':'bar', 'userId':1}

2response = requests.post('https://jsonplaceholder.typicode.com/posts', data=data)

3print(response.status_code)

4print(response.json())

这里我们向服务器提交了一些数据,data 就是我们要提交的内容。服务器收到之后给我们返回了响应,我们用 response.json() 把它转成 Python 的字典格式后打印出来。

温馨提示:POST 请求除了 data 之外,还可以用 json 参数直接传递 JSON 数据,requests 会自动帮你设置请求头为 application/json,非常方便。

4.

添加请求头

有时候我们需要在请求里加上一些额外的信息,比如用户代理(User-Agent)、授权信息(Authorization)等等。这些都是通过 HTTP 头(headers)传递的。requests 也很容易让你加这些东西:

1headers = {'User-Agent':'my-app/0.0.1'}

2response = requests.get('https://jsonplaceholder.typicode.com/posts/1', headers=headers)

3print(response.status_code)

4print(response.headers)

上面的例子里,我们加了一个 User-Agent 头,这个头告诉服务器我们是什么应用在发这个请求。服务器返回的响应中也包含了一些头信息,可以通过 response.headers 查看。

5.

处理响应码

每次我们发出请求之后,服务器都会返回一个响应码,表示请求的处理状态。最常见的响应码有:

  • 200:成功

  • 404:找不到资源

  • 500:服务器错误

我们可以通过 response.status_code 来获取响应码,并根据不同的响应码做出相应的处理:

1response = requests.get('https://jsonplaceholder.typicode.com/posts/999')

2if response.status_code == 200:

3 print('请求成功!')

4elif response.status_code == 404:

5 print('资源未找到')

6else:

7 print(f'出现错误:{response.status_code}')

温馨提示:如果你发出的请求总是失败,记得检查一下 URL 是否正确,网络是否通畅,或者目标服务器是否正常工作。

6.

上传文件

再复杂一点的操作,比如上传文件,requests 也能轻松搞定。你只要把文件通过 files 参数传递过去就行了,看看这个例子:

1files = {'file':open('test.txt', 'rb')}

2response = requests.post('https://httpbin.org/post', files=files)

3print(response.text)

这里我们上传了一个文本文件,requests 会帮你处理文件的编码和传输。服务器收到文件后,会返回一些信息,我们可以通过 response.text 查看。

温馨提示:记得在上传完成后关闭文件,以释放资源。你可以用 with open() 来自动管理文件的关闭,也可以手动调用 file.close()。

7.

处理异常

网络请求并非总是顺利的,有时候会碰到超时、连接异常等问题。requests 提供了一些内置的异常处理方法,让你可以优雅地处理这些错误:

1try:

2 response = requests.get('https://jsonplaceholder.typicode.com/posts/1', timeout=1)

3 print(response.text)

4except requests.Timeout:

5 print('请求超时了...')

6except requests.ConnectionError:

7 print('连接失败...')

8except requests.RequestException as e:

9 print(f'出现错误:{e}')

在这里,我们设置了一个超时时间,如果请求超过这个时间还没有响应,就会抛出 Timeout 异常。其他常见的异常有 ConnectionError(连接失败)和 RequestException(所有请求错误的基类)。

温馨提示:设置超时时间是个好习惯,尤其是在处理外部服务的时候,避免请求卡住导致程序崩溃。

8.

总结

requests 这个库真的是非常友好、简单又强大。你可以用它轻松地和网络上的服务进行交互,处理各种 HTTP 请求和响应,不用担心底层的复杂操作。如果你还没用过它,赶紧试试吧,这会让你的 Python 编程更上一层楼!

Image

往期回顾

1.

2.

3.

别忘了点

Image

分享、

Image

收藏、

Image

在看、

Image

点赞

哦!