1.介绍

1.1 get请求

import http.client

# 目标网站
host = "www.example.com"
conn = http.client.HTTPSConnection(host)

# 发送请求
conn.request("GET", "/")

# 获取响应
response = conn.getresponse()
print("状态码:", response.status)
print("响应头:", response.getheaders())

# 解析返回的 HTML 内容
html = response.read().decode("utf-8")
print("响应内容:", html[:500])  # 只打印前500个字符

conn.close()

输出:

1.2 post请求

import http.client
import json

host = "jsonplaceholder.typicode.com"  # 示例 API 服务器
conn = http.client.HTTPSConnection(host)

# 请求头
headers = {
    "Content-Type": "application/json",
    "User-Agent": "Python http.client"
}

# 发送的 JSON 数据
payload = json.dumps({"title": "foo", "body": "bar", "userId": 1})

# 发送请求
conn.request("POST", "/posts", body=payload, headers=headers)

# 获取响应
response = conn.getresponse()
print("状态码:", response.status)
print("响应头:", response.getheaders())

# 解析返回的 JSON 数据
data = response.read().decode("utf-8")
parsed_data = json.loads(data)
print("解析后的数据:", parsed_data)

conn.close()

输出:

  • 使用 http.client.HTTPSConnection() 连接网站
  • 使用 request() 发送 GET 或 POST 请求
  • 使用 getresponse() 获取响应
  • 解析返回内容:HTML 用 BeautifulSoup,JSON 用 json.loads()

2.响应头的内容

response.getheaders() 返回的是服务器返回的 HTTP 响应头(Response Headers),这些头部字段提供了关于响应的各种元信息,如数据类型、缓存策略、速率限制、服务器信息等。

这些 HTTP 响应头的作用包括:

  1. 基本响应信息(日期、内容类型、长度等)
  2. 服务器和代理信息(Server、Via、X-Powered-By)
  3. 缓存控制(Cache-Control、Expires、Etag)
  4. 跨域支持(Access-Control-*)
  5. 速率限制(X-Ratelimit-*)
  6. 重定向(Location)
  7. 错误监控 & 性能数据(NEL、Reporting-Endpoints、server-timing)
  8. Cloudflare 相关(cf-cache-status、CF-RAY)

3.浏览器和python脚本

如果开启了全局vpn之后,所有的网络流量(包括浏览器访问的网址)都会通过 VPN 服务器转发。通过浏览器访问网址:

  1. 你在浏览器输入网址(如 https://example.com)。
  2. 浏览器将请求发送到本机的网络协议栈(TCP/IP 层)。
  3. 如果 VPN 处于 全局模式,流量会被 VPN 劫持,并通过 VPN 隧道转发到 VPN 服务器。
  4. VPN 服务器接收请求,并替你访问 example.com。
  5. 服务器返回数据,VPN 服务器再将数据加密并传回你的电脑。
  6. 你的浏览器解密并显示网页内容。

通过python的http脚本访问网址,http.client 访问的流程和浏览器类似:

  1. Python 代码调用 http.client.HTTPSConnection() 发送请求。
  2. 请求进入本机的网络协议栈(TCP/IP 层)。
  3. 由于 VPN 处于全局模式,VPN 劫持流量,并将其转发到 VPN 服务器。
  4. VPN 服务器访问目标网站,并返回数据。
  5. Python 脚本获取响应数据。

两者流程相似,都会走到TCP/IP层。通过如下脚本可验证,用 Python 代码获取当前外网 IP 来验证:

import http.client
import json

conn = http.client.HTTPSConnection("api64.ipify.org")
conn.request("GET", "/?format=json")

response = conn.getresponse()
data = response.read().decode("utf-8")

print("你的外网 IP:", json.loads(data)["ip"])

conn.close()

如果 Python 脚本返回的 IP 与浏览器访问 https://api64.ipify.org?format=json 返回的 IP 一致,说明 Python 请求也走了 VPN。

python的requests.get可以在访问时指定代理ip:端口。

更多推荐