1. 基本用法
1.1. 安装requests库
pip3 install requests
1.2. 发送HTTP请求
requests.request(method, url, **kwargs)
1.3. 发送GET请求
requests.get(url, params=None, **kwargs)
1.4. 发送POST请求
requests.post(url, data=None, json=None, **kwargs)
1.5. 发送PUT请求
requests.put(url, data=None, **kwargs)
1.6. 发送DELETE请求
requests.delete(url, **kwargs)
1.7. 发送HEAD请求
requests.head(url, **kwargs)
1.8. 创建一个会话对象
requests.session()
1.9. 获取重定向目标
requests.get_redirect_target(response)
1.10. 发送PATCH请求
requests.patch(url, data=None, **kwargs)
扫一扫欢迎关注,一起学习!
1.11. response返回
通过response对象的各种属性和方法来查看响应的各项信息
- .status_code:返回响应状态码,例如200表示请求成功,404表示请求的资源不存在等;
- .headers:返回响应头信息,是一个字典类型;
- .text:返回响应的内容,是一个字符串类型;
- .content:返回响应的二进制内容,是一个bytes类型;
- .cookies:返回响应的cookie信息,是一个字典类型;
- .json():返回响应的json格式数据,如果响应内容不是json格式,则会抛出异常;
- .encoding:返回响应内容的编码格式;
- .url:返回响应的URL地址;
- .history:返回请求历史,是一个列表类型,其中每个元素都是一个response对象。
2. GET与POST请求方式
GET和POST是HTTP协议中最常用的两种请求方法,它们在参数传递、安全性、缓存以及URL长度上有所区别。具体分析如下:
- 参数传递:GET请求将参数包含在URL中,而POST请求通过request body传递参数。这意味着GET请求的参数会直接显示在浏览器的地址栏中,而POST请求的参数不会显示。
- 安全性:POST请求通常被认为比GET请求更安全,因为POST请求的数据不会像GET请求那样显示在URL中,从而减少了敏感信息泄露的风险。
- 缓存:GET请求的结果可以被浏览器缓存,这使得重复访问同一资源时可以更快地加载页面。而POST请求通常不会被缓存,因为每次提交的数据可能不同,缓存可能会导致数据不一致。
- URL长度:由于GET请求的参数是附加在URL上的,所以URL的长度受到限制。如果参数过多或过长,可能会导致服务器拒绝处理请求。POST请求则没有这个问题,因为参数是在请求体中发送的。
总的来说,GET请求适合用于获取数据,而POST请求适合用于提交数据。在实际开发中,选择使用哪种请求方法取决于具体的需求和场景。
2.1. GET
import requests
url = 'https://www.baidu.com/s'
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 方式1
rep = requests.get('https://www.baidu.com/s?ie=UTF-8&wd=中国', headers=headers)
# 方式2
params = {
'ie' : 'UTF-8',
'wd' : '中国'
}
rep = requests.get(url,params=params ,headers=headers)
print(rep.text)
2.2. POST
import requests
url = 'https://fanyi.qq.com/api/translate'
data = {
'source': 'auto',
'target': 'en',
'sourceText': '中国'
}
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
rep = requests.post(url, data=data, headers=headers)
print(rep.text)
import requests
url = 'https://fanyi.qq.com/api/translate'
data = {
'source': 'auto',
'target': 'en',
'sourceText': '中国'
}
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
rep = requests.post(url, data=data, headers=headers)
print(rep.text)
{
"translate": {
"errCode": 0,
"errMsg": "",
"source": "zh",
"target": "en",
"records": [
{
"sourceText": "中国",
"targetText": "China"
}
],
"full": true,
"options": {}
},
"dict": null,
"suggest": null,
"errCode": 0,
"errMsg": "ok"
}
2.3. 小结
- get请求中带的参数为params,post使用的参数为data。
- 运行后返回为空,一般被限制了User-Agent。
3. 请求头headers
Headers在HTTP请求中扮演着重要的角色,它们为服务器提供额外的信息,帮助服务器正确处理请求。例如,通过设置User-Agent可以模拟浏览器行为,避免被网站识别为爬虫并封锁。
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
Cookie: PHPSESSID=d1s5jnrl3kjhg5iuj65t54rd5
以下是一些常见的HTTP请求头字段及其含义:
3.1. User-Agent
表明发送请求的用户代理(通常是浏览器)的信息。服务器通过这个字段来识别客户端使用的操作系统、浏览器类型和版本等。
3.2. Accept
告诉服务器客户端能够接受哪些类型的媒体,这样服务器可以根据客户端的偏好返回相应的内容。例如,Accept: text/html 表示客户端希望接收HTML格式的响应。
3.3. Content-Type
当客户端需要发送数据给服务器时,这个字段指定数据的MIME类型。例如,Content-Type: application/json 表示客户端发送的是JSON格式的数据。
3.4. Accept-Encoding
表示客户端能够解码哪些编码方式的数据。这通常用于指定客户端是否支持压缩编码,如Accept-Encoding: gzip。
3.5. Cookie
用于存储会话信息或其他持久性数据。服务器可以通过设置Cookie来维护客户端的状态。
3.6. Authorization
用于提供认证信息,如Bearer tokens或HTTP基本认证的用户名和密码。
3.7. Connection
控制是否关闭网络连接,或者是否使用持久连接。例如,Connection: keep-alive 表示使用持久连接。