首页 > 解决方案 > 通过 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 地址。

我究竟做错了什么?

标签: javascriptphpajax

解决方案


在您的 PHP 示例中,您正在HTTP_CLIENT_IP使用 function getRealIpAddr(),但在您的 ajax 调用中,您只使用ipapi.phpas URL。

您必须在此调用中输入完整的 URL,例如:

xmlhttp.open("GET", "http://www.myAwesomeURL.com/getIpApi", true);

并且在这条GET /getIpApi服务器路径上必须返回你的函数的结果getRealIpAddr(),然后你就可以在你的前端应用程序中使用它。


推荐阅读