1

我有一台服务器,但 cURL 使用的是服务器的 IP 地址。我希望 cURL 使用进入服务器的人的 IP 地址。

我怎样才能做到这一点?

4

1 回答 1

3

您想发出一个 HTTP 请求,使远程服务器误以为来自您用户的 IP 地址。这是不可能的。用户的IP地址不包含在HTTP请求中;您在$_SERVER['REMOTE_ADDR]`中获得的值来自IP协议。

但是,您可以充当用户的代理。似乎您已经知道这一点,但您无法找出正确的方法。

实际上,您必须在对远程服务器的请求中添加标头。但是,您传递给的参数CURLOPT_HTTPHEADER是逐字写入请求cUrl发送的 HTTP 请求列表。

这意味着您的代码应为:

curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Forwarded-For: $ip"));

请注意,远程服务器可以忽略标头,因为程序员监督了客户端使用 HTTP 代理的可能性,或者因为标头很容易伪造。如果它忽略它,那么它将使用您的服务器的 IP 地址作为客户端 IP 地址(这是您首先要避免的)。

阅读有关X-Forwarded-ForHTTP 标头的更多信息。

于 2016-03-05T20:00:50.827 回答