pin_drop当前位置:知识文库 ❯ 图文
requests.get()详解 - Python发送GET请求完整教程
目录
一、requests.get()概述
requests.get() 是requests库中最常用的方法,用于向服务器发送HTTP GET请求。GET请求通常用于获取资源,请求参数通过URL查询字符串传递。requests.get()封装了连接管理、编码处理、重定向跟踪等复杂逻辑,让开发者只需关注URL和参数即可完成请求。
在Web开发中,GET是最基础的HTTP方法。当你在浏览器地址栏输入网址并按回车时,浏览器就是在发送GET请求。requests.get()让你在Python代码中也能轻松模拟这种行为,是Web爬虫和API调用的核心工具。
二、语法与参数详解
代码示例
requests.get(url, params=None, **kwargs)
返回值:返回一个 requests.Response 对象,包含服务器响应的所有信息。
三、基本GET请求
最简单的GET请求只需要提供一个URL。requests会自动处理连接、发送请求、接收响应并返回Response对象:
代码示例
import requests
# 发送基本GET请求
response = requests.get('https://httpbin.org/get')
print(f"状态码: {response.status_code}")
print(f"响应编码: {response.encoding}")
print(f"响应文本: {response.text[:200]}")输出:
代码示例
状态码: 200
响应编码: utf-8
响应文本: {
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.31.0",
"X-Amzn-Trace-Id": "Root=1-abc123"
},
"origin": "192.168.1.1",
"url": "https://httpbin.org/get"
}四、带查询参数的GET请求
在实际开发中,我们经常需要在GET请求中传递查询参数。requests提供了两种方式来传递参数:
方式1:使用params参数(推荐)
这是推荐的做法,requests会自动将字典转换为URL查询字符串,并正确处理中文编码:
代码示例
import requests
# 使用params参数(推荐)
params = {
'name': '张三',
'age': 25,
'city': '北京'
}
response = requests.get('https://httpbin.org/get', params=params)
data = response.json()
print(f"请求URL: {data['url']}")
print(f"查询参数: {data['args']}")方式2:直接拼接URL
代码示例
import requests
# 直接拼接URL
response2 = requests.get('https://httpbin.org/get?name=李四&age=30')
data2 = response2.json()
print(f"拼接URL参数: {data2['args']}")输出:
代码示例
请求URL: https://httpbin.org/get?name=%E5%BC%A0%E4%B8%89&age=25&city=%E5%8C%97%E4%BA%AC
查询参数: {'name': '张三', 'age': '25', 'city': '北京'}
拼接URL参数: {'name': '李四', 'age': '30'}小贴士
当使用params传递包含中文的参数时,requests会自动进行URL编码(如"张三"变为"%E5%BC%A0%E4%B8%89")。如果手动拼接URL,需要使用 urllib.parse.quote() 进行编码,因此强烈建议始终使用params参数。
五、自定义请求头
在爬虫开发中,经常需要自定义请求头来模拟浏览器行为,绕过网站的反爬虫机制。headers参数允许你设置任意的HTTP请求头:
代码示例
import requests
# 设置自定义请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'application/json',
'Accept-Language': 'zh-CN,zh;q=0.9',
'X-Custom-Header': 'MyValue'
}
response = requests.get('https://httpbin.org/get', headers=headers)
data = response.json()
print(f"自定义User-Agent: {data['headers'].get('User-Agent', '未设置')}")
print(f"自定义Accept: {data['headers'].get('Accept', '未设置')}")
print(f"自定义Header: {data['headers'].get('X-Custom-Header', '未设置')}")输出:
代码示例
自定义User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
自定义Accept: application/json
自定义Header: MyValue小贴士
User-Agent 是服务器识别客户端身份的关键字段。默认情况下,requests使用 python-requests/x.x.x 作为User-Agent,很容易被反爬虫系统识别。在爬取网站时,建议将其设置为常见浏览器的User-Agent字符串。
六、实际应用场景
-
搜索引擎爬虫:通过GET请求获取搜索结果页面,params传递关键词、页码和过滤条件
-
天气API调用:调用天气接口,通过GET请求传递城市名称和日期,获取实时天气数据
-
微服务间通信:在分布式系统中,通过GET请求查询其他服务的资源信息
-
数据采集:定期通过GET请求获取公开数据接口,如股票行情、新闻列表等
七、注意事项
参数安全性:GET请求的参数会暴露在URL中,不要传递敏感信息(如密码、密钥等),这些信息应使用POST请求发送
URL长度限制:URL长度有限制(浏览器通常限制在2048字符),参数过多或数据量较大时应考虑使用POST请求
自动编码:params参数中的中文会自动进行URL编码,无需手动使用urllib.parse.quote()
八、HTTP请求方法对比
了解不同HTTP方法的区别有助于选择合适的请求方式:
九、课后练习
练习1
使用requests.get()访问 https://httpbin.org/get,传递参数key1=value1&key2=value2,打印服务器收到的参数
练习2
编写程序,模拟浏览器发送GET请求,设置User-Agent为Chrome浏览器的标识,访问 https://httpbin.org/user-agent 并打印结果
练习3
编写一个函数,接受URL和参数字典,发送GET请求并返回JSON响应数据,要求包含超时处理和异常捕获
常见问题
params参数和直接拼接URL有什么区别?
params参数方式由requests自动处理URL编码,支持中文字符,代码更清晰易读;直接拼接URL需要手动处理编码,容易出错。除非有特殊需求,否则应优先使用params参数。
GET请求的最大URL长度是多少?
HTTP协议本身没有规定URL长度限制,但大多数浏览器限制在2048字符(2KB)左右,不同服务器也有自己的限制。如果参数过多或数据量较大,应改用POST请求。
如何处理GET请求的超时?
通过timeout参数设置超时时间(秒),如 requests.get(url, timeout=10)。也可以传元组设置连接超时和读取超时:timeout=(3, 7)。
什么是幂等性?为什么GET是幂等的?
幂等性指多次执行同一操作产生的结果与执行一次相同。GET请求只读取资源,不修改服务器状态,因此无论执行多少次结果都一样,是幂等的。
本文涉及AI创作
内容由AI创作,请仔细甄别