python-24-一篇文章彻底掌握Python HTTP库Requests
一.简介
在 Python 中,Requests 是一个非常流行且易于使用的 Python HTTP 库,专门用于发送 HTTP/HTTPS 请求,获取请求响应;
可能觉得HTTP请求不是应该前端去做么?不要这样想,我还见过数据库用SQL语言发送HTTP请求呢!
Python发送HTTP请求那就正常太多!其实后端语言发送HTTP请求的场景很多。
这个应用场景是什么?不要和FastAPI和Django 这些提供API接口的框架混淆!因为我们今天介绍的是请求,不是提供API被请求。。。
我常用的场景有以下:
1.抓取一些网站资源,比如打造自己的翻译工具;
2.微信小程序服务端开发,企业微信服务端开发,钉钉自建应用服务段开发等 都需要Requests 跟这些平台提供的api接口进行交互;
3.有些硬件通信比如门禁设备 食堂 水表 电表等数据交换;
4.还有前端CORS跨域请求异常的,我可以用后端来请求,毕竟跨域请求是浏览器的概念跟后端请求没关系。
所以说Requests 在真实项目开发中是必须要掌握的一件事情!
好,开始我们今天的日拱一卒!
二.安装Requests 库
pip install requests
官方文档:https://requests.readthedocs.io/
三.测试网站
测试网站,就是用来模拟请求的API,行业内又叫乒乓接口
https://httpbin.org/
四.发送 HTTP 请求
- GET 请求
这个请求最简单,但是有局限性,是基于url来请求和传承,存在问题如下:
-
请求内容容易被抓取,请求参数容易暴露;
-
请求传参有基于url有大小限制一般为 4,096 - 8,192 字符;
请求示例
import requests
response = requests.get('https://api.github.com')
# 输出响应的状态码
print(response.status_code)
# 输出响应的内容
print(response.text) # 或者 response.json() 如果返回的是 JSON 格式的数据
'''
200
{
"current_user_url": "https://api.github.com/user",
"current_user_authorizations_html_url": "https://github.com/settings/connections/applications{/client_id}",
"authorizations_url": "https://api.github.com/authorizations",
……………………等等
'''
来个不一样的请求,只为交流学习测试用。。。
import requests
response = requests.get('https://www.iciba.com/word?w=hello,world')
# 输出响应的状态码
print(response.status_code)
# 输出响应的内容
print(response.text) # 或者 response.json() 如果返回的是 JSON 格式的数据
#构造get请求参数
import requests
params = {'w': 'hello,world'}
response = requests.get('https://www.iciba.com/word',params=params)
print(response.url) # 显示完整的 URL https://www.iciba.com/word?w=hello%2Cworld
# 输出响应的状态码
print(response.status_code) #200
# 输出响应的内容
print(response.text)
示例2:
import requests
r = requests.get(url='http://dict.baidu.com/s', params={'wd': '火龙果'}) # 带参数的GET请求
print(r.url)
print(r.text)
2.POST 请求
这个请求用的是最多,我还看到有的公司规定请求全部是POST
import requests
# 发送一个带数据的 POST 请求
data = {'username': 'test', 'password': '123456'}
response = requests.post('https://httpbin.org/post', data=data)
# 查看返回的 JSON 数据
print(response.json())
'''
输出:
{'args': {}, 'data': '', 'files': {}, 'form': {'password': '123456', 'username': 'test'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '29', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.27.1', 'X-Amzn-Trace-Id': 'Root=1-672df996-46a1cb3506a476a842fee9ad'}, 'json': None, 'origin': '112.32.85.96', 'url': 'https://httpbin.org/post'}
'''
3.PUT 请求(用的少,了解即可)
import requests
# PUT 请求更新某个资源
data = {'name': 'new_name'}
response = requests.put('https://httpbin.org/put', data=data)
# 查看返回的内容
print(response.json())
4.DELETE 请求
见名知义,用来请求删除资源,但是会不会删除资源跟这个请求方式没有关系。。
import requests
response = requests.delete('https://httpbin.org/delete')
print(response.status_code)
五.请求头(Headers)
Requests
允许你向请求中添加自定义的 HTTP 头。例如,发送请求时,你可能需要设置 User-Agent
、Authorization
或 Content-Type
等头信息。
示例:
import requests
headers = {'User-Agent': 'MyApp/1.0'}
response = requests.get('https://httpbin.org/headers', headers=headers)
print(response.json())
六.设置超时
try:
response = requests.get('https://httpbin.org/delay/10', timeout=5)
except requests.exceptions.Timeout:
print("请求超时!")
七.获取请求响应信息
#获取状态码
print(response.status_code) # 200 表示成功
#获取响应内容
print(response.text) # 如果响应是文本内容
print(response.json()) # 如果响应是 JSON 格式
#获取响应头
print(response.headers)
#获取请求的 URL
print(response.url)
#获取请求的 Cookies
print(response.cookies)
八.代理设置
import requests
proxies = {
'http':'http://10.10.1.10:3128',
'https':'https://10.10.1.10:1080'
}
requests.get('http://httpbin.org/ip',proxies=proxy)
print(response.text)
九.附请求头表
请求头 | 作用 | 示例 |
---|---|---|
User-Agent | 指定客户端的类型(浏览器、爬虫等)。服务器根据该信息返回相应的内容。 | User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 |
Accept | 指定客户端能够接受的响应内容类型。服务器根据此返回符合格式的响应。 | Accept: application/json 或 Accept: text/html |
Accept-Encoding | 指定客户端支持的内容编码方式,通常用于压缩响应内容(如 gzip、deflate)。 | Accept-Encoding: gzip, deflate |
Content-Type | 指定请求体的类型,常用于 POST 或 PUT 请求,告诉服务器客户端发送的数据格式。 | Content-Type: application/json 或 Content-Type: application/x-www-form-urlencoded |
Authorization | 用于身份认证,携带认证信息(如 Basic Auth、Bearer Token)。 | Authorization: Bearer <token> 或 Authorization: Basic <base64-encoded credentials> |
Host | 指定请求的目标主机,通常是域名或 IP 地址,必须在 HTTP/1.1 请求中提供。 | Host: www.example.com |
Cookie | 发送客户端保存的 cookies,服务器根据 cookies 保持用户会话或跟踪用户。 | Cookie: sessionid=abc123; logged_in=true |
Connection | 控制连接的管理方式,常见值为 keep-alive (保持连接)或 close (关闭连接)。 | Connection: keep-alive 或 Connection: close |
Cache-Control | 控制缓存机制,定义客户端或服务器如何缓存响应。 | Cache-Control: no-cache 或 Cache-Control: max-age=3600 |
Accept-Language | 指定客户端能接受的语言,服务器根据此返回相应语言的内容。 | Accept-Language: en-US,en;q=0.9 |
Referer | 指定请求来源页面,通常用于追踪来源网站,防止 CSRF 攻击。 | Referer: https://www.example.com/page1 |
X-Requested-With | 通常用于 AJAX 请求,指示请求是由 JavaScript 发起的。 | X-Requested-With: XMLHttpRequest |
If-None-Match | 用于缓存控制,结合 ETag 使用,表示仅当目标资源的 ETag 不匹配时,才返回新内容。 | If-None-Match: "abc123" |
If-Modified-Since | 用于缓存控制,表示仅当目标资源自指定时间后有修改时,才返回新内容。 | If-Modified-Since: Wed, 21 Oct 2023 07:28:00 GMT |
Range | 请求部分资源,通常用于下载大文件时指定下载范围。 | Range: bytes=0-1023 |
TE | 指定客户端支持的传输编码方式,常用于 Transfer-Encoding 。 | TE: trailers, deflate |
Upgrade-Insecure-Requests | 表示客户端支持从 HTTP 升级到 HTTPS 请求,通常由浏览器发送。 | Upgrade-Insecure-Requests: 1 |
Pragma | 与 Cache-Control 类似,指定缓存策略,主要用于 HTTP/1.0 请求。 | Pragma: no-cache |
Max-Forwards | 限制代理服务器在转发请求时的最大跳数,通常用于 TRACE 和 OPTIONS 请求。 | Max-Forwards: 10 |
Content-Length | 指定请求体的长度,单位是字节。 | Content-Length: 1234 |
十.总结
在目前前后端分离的环境下HTTP实在太频繁!但是大家可能常见的是前端HTTP请求,其实后端请求也有不少应用场景,我对开发的理解是不局限于任何一门语言,学的知识越多解决的问题越多,这是肯定!不要抱着老的思想去解决问题。。能解决的范围很窄。。
就比如很古老的基于数据库开发!我尼玛,你们见过数据库也能发送HTTP请求么?我见过。简直目瞪口呆。
创作整理不易,请大家多多关注 多多点赞,有写的不对的地方欢迎大家补充,我来整理,再次感谢!