Python HTTP请求库requests使用指南

Python中,处理HTTP请求的一个非常流行且易于使用的库是requests。这个库使得发送HTTP请求变得非常简单,不需要手动添加查询字符串到URL中。本文将带了解requests库的各种特性,以及如何发送GET和POST请求。

安装

首先,需要在系统中安装pipenv,然后执行以下命令来安装requests库:

$ pip install requests

发送GET请求

HTTPGET请求通常用于从服务器检索数据。从请求中接收到的内容可以用来渲染从API检索的数据列表,或者根据查询字符串过滤产品列表。

语法如下:

import requestsr = requests.get(url)

要创建一个GET请求,首先导入requests库,然后创建一个响应对象‘r’。将‘URL’传递给get函数。响应对象‘r’将包含从URL接收到的所有信息。例如:

import requestsr = requests.get('https://en.wikipedia.org/wiki/Wikipedia')print(r)

在URL中传递参数:

URL参数用于动态地向页面发送额外信息。首先创建一个包含键值对的字典,然后将字典传递给params关键字参数,如下例所示:

payload = {"Name": "Harry", "location": "USA"}r = requests.get("https://httpbin.org/get", params=payload)

发送POST请求

POST请求通常用于发送表单数据或上传文件。POST请求旨在创建或更新资源,并允许在一次请求中发送更多的内容。

语法如下:

import requestspayload = {key1: value1, key2: value2}response = requests.post(url, data=payload)

首先,导入requests库,然后使用Post()请求方法传递数据。最后,将数据和URL一起传递。通过POST请求传递的字典将被发送到服务器。例如:

payload = {'title': "john", 'body': "John is an engineer", 'id': 101}res2 = requests.post('https://httpbin.org/post', data=payload)print(res2.text)

上传文件

可以使用requests库轻松上传文件。

import requestsfiles = {'file': open('/content/data1.txt', 'rb')}r = requests.post('https://httpbin.org/post', files=files)

响应

状态码:

状态码让了解请求的状态。服务器对客户端的请求发出响应时会附带状态码。要访问状态码,使用status_code关键字,如下所示:

r.status_code

HTTP状态码:

1xx范围内的状态码表示响应是信息性的。如果是2xx范围内的,表示请求成功。在这个范围内,如果是200,表示OK,201表示Created,202表示Accepted,等等。同样,301表示永久移动,400是Bad Requests,401是未授权,500是内部服务器错误等。

二进制响应内容

要访问字节(非文本)形式的响应内容,使用:

print(r.content)

要查看字符串或文本形式的响应,使用:

print(r.text)

JSON(JavaScript对象表示法)

requests库有一个内置的JSON解码器,用于处理从服务器响应中发送的JSON内容。JSON解码器允许将JSON响应解析为Python对象。JSON格式的数据以名称和值对的形式存储,用逗号分隔。花括号表示对象,方括号定义数组。

import requestsr = requests.get('https://api.coinbase.com/v2/currencies')data = r.json()print(data)

要打印第一个元素,使用:

print(data['data'][0])

HTTP头

当向服务器发出请求时,响应对象包含传递请求中额外信息的头。一个常见的头是content-type头,它指示资源的媒体类型。让看看之前例子中创建的响应对象的头(JSON)。

print(r.headers['Content-Type'])

观察到content-type的媒体类型是“application/JSON”。其他一些常见的媒体类型包括“text/plain”,“text/javascript”和“multipart/form-data”。当调用headers函数时,它会返回响应对象中的所有头的字典。

也可以为POST请求创建自定义头,如下所示:

headers = {'content-type': 'text/javascript'}r = requests.post('https://httpbin.org/post', headers=headers)print(r.request.headers)

HTTP Cookies

requests库允许创建和读取服务器的HTTP cookies。Cookie是服务器发送到用户Web浏览器的一小块数据。

cookies = {'Status': 'Active'}r = requests.get('https://httpbin.org/cookies', cookies=cookies)print(r.text)

RequestsCookieJar是一种特殊形式的字典,允许自定义发送cookies的位置。Cookies在RequestsCookiesJar中返回。让看一个例子:

jar = requests.cookies.RequestsCookieJar()jar.set('location', 'India', domain='httpbin.org', path='/cookies')jar.set('Name', 'Harry', domain='httpbin.org', path='/profile')r = requests.get('https://httpbin.org/cookies', cookies=jar)print(r.text)

错误处理

有时请求可能不成功。可以通过查看status_code来确定响应是否成功。另一个常见的异常是Timeout异常,这就是为什么为每个请求定义超时值是一个好习惯,因为它可以防止程序因为服务器无响应而挂起。

response.raise_for_status()

会话用于存储个别用户的数据。创建一个会话对象,可以用来在服务器上设置cookies。只要这个会话对象存在,cookies就会在多个请求之间持久保存数据。

import requests# 创建一个会话对象s = requests.Session()cookies = {'location': 'India'}r = s.get('https://httpbin.org/cookies/set', params=cookies)# 获取所有cookiesr = s.get('https://httpbin.org/cookies')print(r.text)

本文是一个关于Python中requests库的完整指南。学习了如何使用不同的HTTP方法(如GET和POST)向服务器发送基本请求。还学习了如何自定义头和传递不同的cookies。最后,学习了如何使用会话进行请求。简而言之,requests库使得人类非常容易地处理HTTP请求。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485