Python使用urllib和requests发送HTTP请求的方法详解

 更新时间:2025年12月17日 15:58:53   作者:detayun  
本文介绍了Python中发送HTTP请求的两种方法,即内置的urllib库和第三方requests库,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

本文介绍了Python中发送HTTP请求的两种方法:内置的urllib库和第三方requests库。urllib提供基础功能,而requests库更简单强大,支持GET/POST请求、参数传递、请求头设置等功能。

本文通过天气API示例演示了实际应用,并提供了超时设置、错误处理和JSON解析等实用技巧。推荐大多数场景使用requests库,同时强调了异常处理的重要性。这些方法为获取网络数据和与Web服务交互提供了基础工具。

想象一下,你想要从网上获取一些信息——比如今天的天气、最新的新闻或者一张图片。这就像给网站写一封信,然后等待回信。Python就是你的贴心邮差,帮你轻松完成这个收发过程。

最简单的方式:使用urllib(Python内置)

Python自带了一个叫urllib的库,就像你手机里自带的短信应用,不需要额外安装。

import urllib.request

# 发送一个简单的GET请求
response = urllib.request.urlopen('https://www.example.com')
print(response.read().decode('utf-8'))  # 读取并解码响应内容

推荐方式:使用requests库(更简单强大)

虽然Python自带工具,但requests库就像一款智能邮件应用,让一切变得更加简单直观。

第一步:安装requests

pip install requests

第二步:发送各种类型的请求

import requests

# 1. 简单的GET请求(获取信息)
response = requests.get('https://api.github.com')
print(f"状态码: {response.status_code}")  # 200表示成功
print(response.text)  # 获取网页内容

# 2. 带参数的GET请求(像在搜索框里输入内容)
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url)  # 查看实际请求的URL

# 3. POST请求(提交信息,像填写表单)
data = {'username': 'user', 'password': 'pass'}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())  # 以JSON格式查看响应

# 4. 自定义请求头(像添加特别说明)
headers = {'User-Agent': 'My-Python-App/1.0'}
response = requests.get('https://httpbin.org/user-agent', headers=headers)
print(response.text)

实际应用示例:获取天气信息

import requests

def get_weather(city):
    # 使用一个免费的天气API(实际使用需要申请API密钥)
    api_key = "你的API密钥"
    url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}"
    
    try:
        response = requests.get(url, timeout=5)  # 5秒超时
        response.raise_for_status()  # 如果请求失败会抛出异常
        
        weather_data = response.json()
        print(f"{city}的天气: {weather_data['weather'][0]['description']}")
        print(f"温度: {weather_data['main']['temp']}K")
        
    except requests.exceptions.RequestException as e:
        print(f"获取天气信息失败: {e}")

# 使用函数
get_weather('Beijing')

小贴士和注意事项

超时设置:总是设置合理的超时时间,避免程序卡死

requests.get(url, timeout=5)

错误处理:使用try-except块捕获可能的异常

try:
    response = requests.get(url)
    response.raise_for_status()
except requests.exceptions.RequestException as e:
    print(f"请求出错: {e}")

JSON处理:现代API大多返回JSON格式,requests可以直接解析

data = response.json()

总结

  • 简单需求:使用Python内置的urllib
  • 大多数情况:使用requests库,它更简单、更强大
  • 记住设置超时和处理异常
  • 现代Web API大多使用JSON格式,requests可以轻松处理

现在你已经掌握了用Python发送HTTP请求的基本方法!就像学会了写电子邮件一样,你可以开始探索互联网上的各种数据和服务了。

到此这篇关于Python使用urllib和requests发送HTTP请求的方法详解的文章就介绍到这了,更多相关Python发送HTTP请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PyQt5多线程实现UI不卡顿的解决方案

    PyQt5多线程实现UI不卡顿的解决方案

    在PyQt5中,为了避免长时间的操作阻塞UI界面(导致界面卡死),我们可以使用多线程,通常,我们将耗时的任务放在一个单独的线程中运行,,并通过信号与槽机制与UI线程进行通信,以更新界面,下面是一个示例,演示了如何在更新UI的同时进行多线程操作,确保UI界面不会卡死
    2026-01-01
  • Python中for循环控制语句用法实例

    Python中for循环控制语句用法实例

    这篇文章主要介绍了Python中for循环控制语句用法,较为详细的分析了for循环语句的原理与相关使用技巧,需要的朋友可以参考下
    2015-06-06
  • 小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码

    小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码

    这篇文章主要介绍了PyCharm最新版从下载到安装再到科学使用PyCharm2020最新激活码,需要的朋友可以参考下
    2020-09-09
  • Python如何将模块打包并发布

    Python如何将模块打包并发布

    这篇文章主要介绍了Python如何将模块打包并发布,帮助大家分享自己的模块,感兴趣的朋友可以了解下
    2020-08-08
  • Python对列表进行排序的五种方法举例

    Python对列表进行排序的五种方法举例

    这篇文章主要介绍了Python对列表进行排序的五种方法,文中包括sort()方法、sorted()函数、lambda表达式、operator模块和numpy模块,帮助开发者根据具体需求选择合适的排序方式,需要的朋友可以参考下
    2024-11-11
  • Numpy安装、升级与卸载的详细图文教程

    Numpy安装、升级与卸载的详细图文教程

    Python官网上的发行版是不包含 NumPy 模块的,下面这篇文章主要给大家介绍了关于Numpy安装、升级与卸载的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • python re的findall和finditer的区别详解

    python re的findall和finditer的区别详解

    这篇文章主要介绍了python re的findall和finditer的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Python制作个性化的词云图实例讲解

    Python制作个性化的词云图实例讲解

    大家好,本篇文章主要讲的是Python制作个性化的词云图实例讲解,感兴趣的同学赶紧来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • 解决Python pandas df 写入excel 出现的问题

    解决Python pandas df 写入excel 出现的问题

    今天小编就为大家分享一篇解决Python pandas df 写入excel 出现的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Anaconda3中的Jupyter notebook添加目录插件的实现

    Anaconda3中的Jupyter notebook添加目录插件的实现

    这篇文章主要介绍了Anaconda3中的Jupyter notebook添加目录插件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05

最新评论