带有 php 的 IP 地理位置 API 标头请求



我正在尝试使用 ip-api.com(IP地理位置(来检索使用限制。

第一个 - 我已经设法将 api 与 php 一起使用,但他们没有在响应格式中给出使用限制(最多 45 分钟(。 他们说该信息在HTTP标头中返回。

2nd - 所以我打开了 chrome 开发者网络,看看我是否找到了变量(X-R1 和 X-Ttl(或他们在 HTTP 标头中调用的任何内容,但我在那里看不到它们。

3rd - 我设法做的是使用 php 函数 (get_headers($url((,它工作正常,但是当脚本运行时,它计为 2 个 API 请求,因此使用限制始终计为 2。

如何在第二步或使用某些 php 函数找到它们,这样我就不必像在第三步中那样提出另一个请求?

<?php
//1st request
function getClientIp(){
if(!empty($_SERVER['HTTP_CLIENT_IP'])){
//ip from share internet
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
//ip pass from proxy
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
$clientIp = getClientIp();
$query = @unserialize(file_get_contents('http://ip-api.com/php/'.$clientIp));
if ($query['status'] == 'success'){
echo $query['city'];
echo '<br>';
echo $query['query'];
};
//2nd Request
echo '<br><br>';
$url = 'http://ip-api.com/php/'.$clientIp;
//print_r(get_headers($url));
print_r(get_headers($url, 1)['X-Rl']);

最后我的解决方案只是使用数组变量 $http_response_header。

像这样,我可以在单个请求中获取 API 响应 + 标头。

<?php
function getClientIp(){
if(!empty($_SERVER['HTTP_CLIENT_IP'])){
//ip from share internet
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
//ip pass from proxy
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
function parseHeaders( $headers )
{
$head = array();
foreach( $headers as $k=>$v )
{
$t = explode( ':', $v, 2 );
if( isset( $t[1] ) )
$head[ trim($t[0]) ] = trim( $t[1] );
else
{
$head[] = $v;
if( preg_match( "#HTTP/[0-9.]+s+([0-9]+)#",$v, $out ) )
$head['reponse_code'] = intval($out[1]);
}
}
return $head['X-Rl'];
}
//body request
$clientIp = getClientIp();
$query = @unserialize(file_get_contents('http://ip-api.com/php/'.$clientIp));
if ($query['status'] == 'success'){
echo $query['city'];
echo '<br>';
echo $query['query'];
}
//header request
echo '<br>Available requests: '.parseHeaders($http_response_header);    

最新更新