PHP利用CURL获取外站信息并返回-PHP获取IP归属地
本代码只作为抛砖引玉
有更多别的方案和优化内容请自行研究
源码利用的是 https://ip.chainaz.com 网页内容,并非使用该站的API接口
有兴趣的,可以换其他更精确的站点进行获取
以下为代码方案:
- 利用抓包或者其他方案,获取到 https://ip.chainaz.com 网页源码
- 经过构造后,返回我们需要的内容
以下为PHP源代码,有别的需求可自行修改
<?php
//header("Content-type: text/html; charset=gb2312");
echo '<html>
<head>
<title>IP地理位置接口</title></head></html>';
if (!empty($_GET["ip"])){
$local=$_GET["ip"];
} else {
$local=$_SERVER["REMOTE_ADDR"];
}
$url="https://ip.chinaz.com/".$local;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // ssl 访问核心参数
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$response = curl_exec($ch);
$response = preg_replace('/\s+/', '', $response);
//file_put_contents('yuan.txt',$response);
curl_close($ch);
function get_em($input, $start, $end) {
$substr = substr($input, strlen($start)+strpos($input, $start),
(strlen($input) - strpos($input, $end))*(-1));
return $substr;
}
$string = $response;
$start = '<emid="infoLocation">';
$end = '</em><aclass';
echo 'IP:'.$local.'<br>位置:'.get_em($string, $start, $end);
?>
另外附上代码仓库地址:IP-Location
我反代的代码仓库地址:IP-Location
如需返回json格式,可以修改倒数第二行 echo() 函数为以下代码:
$ip = ['code' => 200, 'ip' => $local, 'weizhi' => get_em($string, $start, $end)];
die(json_encode($ip,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES));