You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Requests模块:能否通过HTTP头指定请求源IP?From字段可行吗?

关于请求头指定源IP与From字段的问题

先给你明确说结论:没法通过HTTP请求头来设置请求的源IP,包括你用的From字段也做不到这个事儿,原因和解决方案我给你拆解开说:

1. 为什么请求头改不了源IP?

HTTP请求的源IP是在TCP连接建立阶段就确定的——客户端和服务器握手时,服务器会直接获取到客户端的真实出口IP(或者客户端网卡绑定的IP),这属于网络传输层的信息。而HTTP请求头是应用层的数据,只是请求内容的一部分,服务器不会把它当成请求的真实源IP来处理。

2. From字段的真实作用

HTTP标准里的From字段,设计初衷是用来标识请求的发起者(比如填写发起人的邮箱地址),方便服务器管理员联系请求发起方,完全不是用来设置源IP的。大多数服务器要么忽略这个字段,要么只会把它记录到日志里,绝对不会用它来替换真实的请求源IP。

3. 你的代码问题分析

你当前的代码里设置了headers={"From":"source_ip"},这只会在HTTP请求头里多一条From: source_ip的记录,但服务器那边看到的请求源IP还是你客户端的真实IP,不会有任何改变。

4. 真正能修改请求源IP的方法

如果你确实需要让请求从指定的源IP发出,得从TCP层面入手,分两种情况:

情况一:客户端有多个本地IP(多网卡)

如果你的机器本身配置了多个IP,可以通过绑定特定本地IP的方式发送请求,示例代码如下:

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.connection import create_connection

def bind_source_ip(source_ip):
    # 重写连接创建函数,绑定指定源IP
    def _create_connection(address, *args, **kwargs):
        sock = create_connection(address, *args, **kwargs)
        sock.bind((source_ip, 0))  # 0表示自动分配可用端口
        return sock
    return _create_connection

# 创建自定义适配器,替换默认的连接逻辑
adapter = HTTPAdapter()
adapter.poolmanager.connection_factory = bind_source_ip("你的本地源IP")

# 用Session挂载适配器,之后的请求都会使用指定IP
session = requests.Session()
session.mount("http://", adapter)
session.mount("https://", adapter)

# 发送请求
response = session.get("http://server_ip/file_name", stream=True)
with open("/home/client1/test/try101.txt", "wb") as handle:
    for chunk in response.iter_content(chunk_size=512):
        if chunk:
            handle.write(chunk)

注意:这里的你的本地源IP必须是你客户端机器上实际存在的IP(比如网卡配置的IP),否则会报错。

情况二:需要伪装成其他外部IP

如果要让服务器看到的是完全不同的外部IP,那得用代理服务器,通过代理转发请求,示例代码:

import requests

# 设置代理地址
proxies = {
    "http": "http://代理服务器IP:端口",
    "https": "http://代理服务器IP:端口"
}

response = requests.get("http://server_ip/file_name", proxies=proxies, stream=True)
with open("/home/client1/test/try101.txt", "wb") as handle:
    for chunk in response.iter_content(chunk_size=512):
        if chunk:
            handle.write(chunk)

这种方式需要你有可用的代理服务器,服务器会把代理IP当成请求的源IP。

内容的提问来源于stack exchange,提问作者Siddharth Sampath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:24:51