1. GET 和 POST
GET 与 POST 的区别:
[1] - 最直观的就是语义上的区别,GET 用于获取数据,POST 用于提交数据.
[2] - GET请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连;POST把提交的数据则放置在是HTTP包的包体中.
[3] - GET的长度受限于url的长度,而url的长度限制是特定的浏览器和服务器设置的,理论上GET的长度可以无限长.
[4] - POST是没有大小限制的,HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力
[5] - POST的安全性要比GET的安全性高.
[6] - POST 和 GET 的选择: 私密性的信息请求使用 POST,查询信息和可以想要通过url分享的信息使用 GET.
2. Python 示例
2.1. GET
import requests
'''
发送一个 GET 请求
'''
# [1] - 最简单的形式
response = requests.get(url='heeps://baidu.com')
# [2] - 添加定制请求头 headers
# 可以在浏览器 F12 开发者工具 Network 中找到网址的 headers 信息
url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}
response = requests.get(url, headers)
# [3] - 自定义代理
url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}
proxies = {"https": "https://127.0.0.1:8889", "http": "http://127.0.0.1:1089"}
response = requests.get(url=url, headers=headers, proxies=proxies)
# [4] - 传递参数
# 浏览器访问的格式如:httpbin.org/get?key=val
payload = {'key1': 'value1', 'key2': 'value2'}
# payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
response = requests.get("http://httpbin.org/get", params=payload)
# [5] - 设置超时
# 经过 timeout 时间之后停止等待响应. 基本上所有的生产代码都应该使用这一参数
# 如果不使用,程序可能会永远失去响应:
response = requests.get('http://github.com', timeout=0.001)
返回结果:
req.ok // 检查返回码是不是 '200 OK',如果是则返回True,否则返回False
req.url // 查看请求的URL
req.text // 查看返回的响应内容,返回的是Unicode数据,一般用于返回文本数据
req.content // 查看返回的响应内容,返回的是二进制数据,一般用于返回图片、文件等二进制数据
req.status_code // 查看返回的HTTP状态码,如 200,404,502 等
req.reason // 查看返回的HTTP状态码文本原因,如 'Not Found', 'OK' 等
req.cookies // 查看返回的cookies信息
req.header // 查看返回的头部信息
2.2. POST
# [1]
payload = {'key1': 'value1', 'key2': 'value2'}
response= requests.post("http://httpbin.org/post", data=payload)
print(response)
# [2]
url = "https://api.xxx.com/testing"
payload = {
'image_url': 'https://test.com/demo.jpg'
}
headers = {
'authorization': "Bearer <ACCESS_TOKEN>"
}
response = requests.request("POST", url, json=payload, headers=headers)
3. 参考
[1] - Docs - requests