PHP/cURL如何使用用户IP?
How to use a user IP with PHP/cURL?
我有一个服务器,但 cURL 正在使用服务器的 IP 地址。我想让 cURL 使用进入服务器的人的 IP 地址。
我该怎么做?
您想发出一个 HTTP 请求,让远程服务器认为它来自您用户的 IP 地址。这是不可能的。 HTTP请求中不包含用户的IP地址;您在 $_SERVER['REMOTE_ADDR
]` 中获得的值来自 IP 协议。
但是,您可以充当用户的代理。看来你已经知道了,但你想不出正确的方法。
确实,您必须在对远程服务器的请求中添加 header。但是,您传递给 CURLOPT_HTTPHEADER
的参数是一个 HTTP 请求列表,这些请求逐字写入 cUrl
发送的请求。
这意味着您的代码应为:
curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Forwarded-For: $ip"));
请注意,远程服务器可以忽略 header,因为程序员监督了客户端使用 HTTP 代理的可能性,或者因为 header 很容易伪造。如果它忽略它,那么它将使用您服务器的 IP 地址作为客户端 IP 地址(这是您首先要避免的)。
详细了解 X-Forwarded-For
HTTP header。
我有一个服务器,但 cURL 正在使用服务器的 IP 地址。我想让 cURL 使用进入服务器的人的 IP 地址。
我该怎么做?
您想发出一个 HTTP 请求,让远程服务器认为它来自您用户的 IP 地址。这是不可能的。 HTTP请求中不包含用户的IP地址;您在 $_SERVER['REMOTE_ADDR
]` 中获得的值来自 IP 协议。
但是,您可以充当用户的代理。看来你已经知道了,但你想不出正确的方法。
确实,您必须在对远程服务器的请求中添加 header。但是,您传递给 CURLOPT_HTTPHEADER
的参数是一个 HTTP 请求列表,这些请求逐字写入 cUrl
发送的请求。
这意味着您的代码应为:
curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Forwarded-For: $ip"));
请注意,远程服务器可以忽略 header,因为程序员监督了客户端使用 HTTP 代理的可能性,或者因为 header 很容易伪造。如果它忽略它,那么它将使用您服务器的 IP 地址作为客户端 IP 地址(这是您首先要避免的)。
详细了解 X-Forwarded-For
HTTP header。