python的http.client模块访问网址
·
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 响应头的作用包括:
- 基本响应信息(日期、内容类型、长度等)
- 服务器和代理信息(
Server、Via、X-Powered-By) - 缓存控制(
Cache-Control、Expires、Etag) - 跨域支持(
Access-Control-*) - 速率限制(
X-Ratelimit-*) - 重定向(
Location) - 错误监控 & 性能数据(
NEL、Reporting-Endpoints、server-timing) - Cloudflare 相关(
cf-cache-status、CF-RAY)
3.浏览器和python脚本
如果开启了全局vpn之后,所有的网络流量(包括浏览器访问的网址)都会通过 VPN 服务器转发。通过浏览器访问网址:
- 你在浏览器输入网址(如
https://example.com)。 - 浏览器将请求发送到本机的网络协议栈(TCP/IP 层)。
- 如果 VPN 处于 全局模式,流量会被 VPN 劫持,并通过 VPN 隧道转发到 VPN 服务器。
- VPN 服务器接收请求,并替你访问
example.com。 - 服务器返回数据,VPN 服务器再将数据加密并传回你的电脑。
- 你的浏览器解密并显示网页内容。
通过python的http脚本访问网址,http.client 访问的流程和浏览器类似:
- Python 代码调用
http.client.HTTPSConnection()发送请求。 - 请求进入本机的网络协议栈(TCP/IP 层)。
- 由于 VPN 处于全局模式,VPN 劫持流量,并将其转发到 VPN 服务器。
- VPN 服务器访问目标网站,并返回数据。
- 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:端口。
更多推荐


所有评论(0)