javascript - 通过 AJAX 获取错误的 IP 地址,但在直接 PHP api 中正确
问题描述
我有以下 PHP 代码来获取客户端 IP 地址:
<?php
function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
echo json_encode(array('ip'=>getRealIpAddr()));
?>
当我直接或通过 Postman 运行此 API 时,我得到了正确的 IP 地址,即我自己的 IP 地址。
我的 AJAX 代码:
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var getresponse = JSON.parse(this.responseText);
ipaddr = getresponse.ip;
console.log(ipaddr);
}
};
xmlhttp.open("GET", "ipapi.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send();
但是当我在我的 HTML 中通过 AJAX 调用这个 api 时,我得到了不正确的 IP 地址。我在 ajax 中得到的 IP 地址是我的服务器(Hostgator 服务器),而不是我自己的 IP 地址。
我究竟做错了什么?
解决方案
在您的 PHP 示例中,您正在HTTP_CLIENT_IP
使用 function getRealIpAddr()
,但在您的 ajax 调用中,您只使用ipapi.php
as URL。
您必须在此调用中输入完整的 URL,例如:
xmlhttp.open("GET", "http://www.myAwesomeURL.com/getIpApi", true);
并且在这条GET /getIpApi
服务器路径上必须返回你的函数的结果getRealIpAddr()
,然后你就可以在你的前端应用程序中使用它。