PHP利用CURL获取外站信息并返回-PHP获取IP归属地

本代码只作为抛砖引玉

有更多别的方案和优化内容请自行研究

源码利用的是 https://ip.chainaz.com 网页内容,并非使用该站的API接口

有兴趣的,可以换其他更精确的站点进行获取

以下为代码方案:

  1. 利用抓包或者其他方案,获取到 https://ip.chainaz.com 网页源码
  2. 经过构造后,返回我们需要的内容

以下为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));
posted @ 2023-05-28 00:36  祭祀雨人  阅读(137)  评论(0编辑  收藏  举报