Python get请求案例如何发送请求

wen python案例 23

本文目录导读:

Python get请求案例如何发送请求

  1. 使用requests库(最常用)
  2. 使用urllib库(Python内置)
  3. 使用aiohttp库(异步请求)
  4. 完整示例:天气API请求
  5. 实用技巧

我来为你介绍Python发送GET请求的几种常见方法:

使用requests库(最常用)

首先安装requests库:

pip install requests

基本GET请求

import requests
# 发送GET请求
response = requests.get('https://api.github.com')
# 检查状态码
print(f"状态码: {response.status_code}")
# 获取响应内容
print(f"响应内容: {response.text}")
# 解析JSON响应
data = response.json()
print(f"JSON数据: {data}")

带参数的GET请求

import requests
# 方法1:直接在URL中带参数
response = requests.get('https://httpbin.org/get?name=张三&age=25')
# 方法2:使用params参数
params = {
    'name': '张三',
    'age': 25,
    'city': '北京'
}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url)  # 查看实际请求的URL
print(response.json())

带请求头的GET请求

import requests
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Accept': 'application/json',
    'Authorization': 'Bearer your_token_here'  # 如果有认证需要
}
response = requests.get('https://api.github.com', headers=headers)
print(response.json())

超时和异常处理

import requests
from requests.exceptions import Timeout, RequestException
try:
    # 设置超时时间为5秒
    response = requests.get('https://api.github.com', timeout=5)
    response.raise_for_status()  # 检查HTTP错误
    if response.status_code == 200:
        data = response.json()
        print("请求成功:", data)
except Timeout:
    print("请求超时")
except RequestException as e:
    print(f"请求失败: {e}")

使用urllib库(Python内置)

from urllib import request, parse
import json
# 带参数的GET请求
params = {
    'name': '张三',
    'age': 25
}
query_string = parse.urlencode(params)
url = f'https://httpbin.org/get?{query_string}'
# 发送请求
req = request.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0')
try:
    with request.urlopen(req, timeout=5) as response:
        # 读取响应内容
        data = response.read().decode('utf-8')
        print(f"状态码: {response.status}")
        print(f"响应内容: {data}")
        # 解析JSON
        json_data = json.loads(data)
        print(f"JSON数据: {json_data}")
except Exception as e:
    print(f"请求失败: {e}")

使用aiohttp库(异步请求)

import aiohttp
import asyncio
async def fetch_data(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.json()
async def main():
    # 发送单个请求
    data = await fetch_data('https://api.github.com')
    print(data)
    # 并发发送多个请求
    urls = [
        'https://api.github.com',
        'https://httpbin.org/get',
        'https://jsonplaceholder.typicode.com/posts/1'
    ]
    tasks = [fetch_data(url) for url in urls]
    results = await asyncio.gather(*tasks)
    for url, result in zip(urls, results):
        print(f"{url}: {result}")
# 运行异步代码
asyncio.run(main())

完整示例:天气API请求

import requests
import json
def get_weather(city_code='101010100'):
    """
    获取天气信息
    :param city_code: 城市代码,默认北京
    """
    url = f'http://www.weather.com.cn/data/cityinfo/{city_code}.html'
    try:
        # 设置请求头模拟浏览器
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        }
        # 发送GET请求
        response = requests.get(url, headers=headers, timeout=5)
        response.raise_for_status()
        # 解析JSON数据
        weather_data = response.json()
        # 提取有用信息
        if weather_data.get('weatherinfo'):
            info = weather_data['weatherinfo']
            print(f"城市: {info.get('city')}")
            print(f"最高温度: {info.get('temp2')}℃")
            print(f"最低温度: {info.get('temp1')}℃")
            print(f"天气: {info.get('weather')}")
    except requests.exceptions.RequestException as e:
        print(f"请求失败: {e}")
    except json.JSONDecodeError:
        print("JSON解析失败")
    except KeyError as e:
        print(f"数据格式错误: {e}")
# 调用函数
get_weather('101010100')  # 北京天气

实用技巧

会话保持

import requests
# 使用Session对象可以保持cookies
session = requests.Session()
# 第一次请求可能设置cookies
session.get('https://example.com/login')
# 后续请求会自动携带cookies
response = session.get('https://example.com/profile')

重定向处理

import requests
# 禁止自动重定向
response = requests.get('https://httpbin.org/redirect/1', allow_redirects=False)
print(f"状态码: {response.status_code}")  # 302
print(f"重定向URL: {response.headers.get('Location')}")

推荐使用方式

  • 日常开发:requests库(简单易用)
  • 性能要求高:aiohttp(异步)
  • 不需要第三方库:urllib(内置)

选择哪种方式主要看你的具体需求和项目环境。

抱歉,评论功能暂时关闭!