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)
参数 类型 默认值 说明
url str 必填 请求的目标URL地址
params dict/list/tuple None URL查询字符串参数,自动拼接至URL
headers dict None 请求头字典
cookies dict/CookieJar None 请求携带的Cookie
auth tuple/AuthBase None 认证信息
timeout float/tuple None 请求超时时间(秒)
allow_redirects bool True 是否允许重定向
verify bool/str True 是否验证SSL证书
proxies dict None 代理设置
stream bool False 是否以流方式读取响应内容

返回值:返回一个 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方法的区别有助于选择合适的请求方式:

方法 用途 参数传递方式 幂等性 安全性
GET 获取资源 URL查询字符串 幂等 安全
POST 提交数据 请求体 非幂等 不安全
PUT 替换资源 请求体 幂等 不安全
PATCH 更新部分资源 请求体 非幂等 不安全
DELETE 删除资源 URL查询字符串/请求体 幂等 不安全

九、课后练习

练习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请求只读取资源,不修改服务器状态,因此无论执行多少次结果都一样,是幂等的。

标签: requests.get GET请求 查询参数 请求头 HTTP方法 Python爬虫

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: requests库简介与安装教程 - Python HTTP请求入门指南 下一篇: requests.post()详解 - Python发送POST请求完整教程

poll相关推荐