Python基础入门 Day105 网络编程之HTTP请求入门

120次阅读
没有评论

共计 2743 个字符,预计需要花费 7 分钟才能阅读完成。

Python 的强大不仅在于数据处理和脚本自动化,它还拥有非常方便的网络编程能力。通过 requests 模块,我们可以轻松地与网站交互,获取网页数据或向服务器提交信息。本节将带你了解如何使用 Python 发起 HTTP 请求,这是学习爬虫、API 调用和网络服务开发的基础。

一、HTTP 请求的基本概念
HTTP(超文本传输协议)是互联网通信的核心。客户端(如浏览器或 Python 程序)通过 HTTP 协议与服务器交互,常见的请求方法包括:

  • GET:向服务器请求数据(例如访问网页)。
  • POST:向服务器提交数据(例如表单、JSON 等)。
  • PUT:更新服务器上的资源。
  • DELETE:删除服务器上的资源。

Python 的 requests 模块是处理这些请求的利器。

二、安装 requests 模块
如果你尚未安装 requests 模块,可以通过命令行安装:

pip install requests

三、GET 请求
GET 请求是最常见的 HTTP 请求类型,用于从服务器获取资源。

import requests

# 发送 GET 请求
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")

# 打印响应状态码和内容
print(" 状态码:", response.status_code)
print(" 响应内容:", response.text)
  • response.status_code:返回 HTTP 状态码(如 200 表示成功)。
  • response.text:返回响应内容(字符串格式)。

你也可以直接获取 JSON 格式的数据:

data = response.json()
print(" 标题:", data['title'])
print(" 内容:", data['body'])

四、带参数的 GET 请求
有时我们需要在请求中携带参数,例如向搜索接口传递关键词。

params = {"userId": 1}
response = requests.get("https://jsonplaceholder.typicode.com/posts", params=params)

print(" 请求的 URL:", response.url)
print(" 返回的结果数量:", len(response.json()))

通过 params 参数,requests 会自动将字典转为 URL 查询参数。

五、POST 请求
POST 请求用于向服务器提交数据,例如登录表单或上传信息。

import requests

data = {"title": " 学习 Python 网络编程 ", "body": "requests 模块非常方便 ", "userId": 1}
response = requests.post("https://jsonplaceholder.typicode.com/posts", json=data)

print(" 状态码:", response.status_code)
print(" 响应内容:", response.json())

此处使用 json 参数自动将 Python 字典转为 JSON 格式并发送。

六、请求头与响应头
HTTP 请求中常常需要添加自定义头部信息,比如模拟浏览器或提供认证信息。

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
    "Accept": "application/json"
}
response = requests.get("https://httpbin.org/headers", headers=headers)

print(" 返回的头信息:", response.json())

同样,响应中也包含许多有用信息:

print(" 响应头:", response.headers)

七、处理网络异常
网络请求可能因超时、连接失败等原因出错。我们可以使用 try-except 块进行异常处理。

import requests

try:
    response = requests.get("https://nonexistent.example.com", timeout=5)
    response.raise_for_status()  # 检查状态码是否为 200
except requests.exceptions.Timeout:
    print(" 请求超时,请检查网络!")
except requests.exceptions.RequestException as e:
    print(" 请求失败:", e)

timeout 参数用于防止请求无限等待,raise_for_status() 会在响应非 200 时抛出异常。

八、下载文件示例
我们可以使用 requests 来下载文件,例如图片或文档。

url = "https://www.example.com/image.jpg"
response = requests.get(url)

if response.status_code == 200:
    with open("downloaded.jpg", "wb") as f:
        f.write(response.content)
    print(" 文件下载完成!")

使用 response.content 可以获取二进制内容,适合图片、PDF 等文件。

九、提交表单与文件上传
如果网站需要表单提交或文件上传,也可以通过 requests 模块轻松实现。

# 表单数据提交
data = {"username": "admin", "password": "123456"}
response = requests.post("https://httpbin.org/post", data=data)
print(response.json())

# 文件上传
files = {"file": open("example.txt", "rb")}
response = requests.post("https://httpbin.org/post", files=files)
print(response.json())

requests 会自动为表单和文件添加正确的 Content-Type 头信息。

十、总结
通过 requests 模块,我们可以轻松完成各种网络请求操作:

  1. 使用 get() 获取网页数据;
  2. 使用 post() 提交表单或 JSON 数据;
  3. 设置请求头 headers 模拟浏览器;
  4. 使用异常处理应对网络问题;
  5. 下载或上传文件。

网络编程是 Python 的重要应用场景之一,掌握 HTTP 请求的使用,可以帮助你快速进入 Web 爬虫、API 调用和自动化测试等领域。

练习与思考:

  1. 使用 requests 获取一个公开 API(如天气、新闻)并解析 JSON 数据。
  2. 模拟浏览器访问百度首页,并保存 HTML 源代码。
  3. 编写一个下载器,能批量下载多个图片并保存到指定目录。
正文完
 0
评论(没有评论)