根据ip地址获取地理位置
假设您需要知道访问您网站的人来自哪个国家/地区,因为您拥有一个国际化的网站,并根据该国家/地区显示不同的内容。 您可以询问用户。 无论如何,您可能都想拥有该功能以确保访问者可以控制,但可以肯定的是,他们会尽其所能地欣赏它的正确性。
没有本机Web技术具有此信息。 JavaScript具有地理位置,但是用户必须批准该地理位置,即使那样,您也必须使用一些库将坐标转换为更可用的国家/地区。 即使后端语言以JavaScript不能访问IP地址的方式,也不会自动知道来源国。
加拿大。 我只要WANNA知道他们是否来自加拿大。
您必须要求某种知道这一点的服务。 IP Geolocation API是该服务,并且是免费的。
您针对API执行GET。 如果要测试它,可以在浏览器中完成它:
https://api.ipgeolocationapi.com/geolocate/184.149.48.32
但是,您不仅会得到这个国家。 您会获得一堆可能需要使用的信息。 我恰好坐在加拿大,这就是我获得IP的目的 :
{
"continent":"North America",
"address_format":"{{recipient}}\n{{street}}\n{{city}} {{region_short}} {{postalcode}}\n{{country}}",
"alpha2":"CA",
"alpha3":"CAN",
"country_code":"1",
"international_prefix":"011",
"ioc":"CAN",
"gec":"CA",
"name":"Canada",
"national_destination_code_lengths":[
3
],
"national_number_lengths":[
10
],
"national_prefix":"1",
"number":"124",
"region":"Americas",
"subregion":"Northern America",
"world_region":"AMER",
"un_locode":"CA",
"nationality":"Canadian",
"postal_code":true,
"unofficial_names":[
"Canada",
"Kanada",
"Canadá",
"カナダ"
],
"languages_official":[
"en",
"fr"
],
"languages_spoken":[
"en",
"fr"
],
"geo":{
"latitude":56.130366,
"latitude_dec":"62.832908630371094",
"longitude":-106.346771,
"longitude_dec":"-95.91332244873047",
"max_latitude":83.6381,
"max_longitude":-50.9766,
"min_latitude":41.6765559,
"min_longitude":-141.00187,
"bounds":{
"northeast":{
"lat":83.6381,
"lng":-50.9766
},
"southwest":{
"lat":41.6765559,
"lng":-141.00187
}
}
},
"currency_code":"CAD",
"start_of_week":"sunday"
}
有了这些信息,我可以轻松地决定将其重定向到我的网站的加拿大版本,或者以CAD显示价格,或者提供法文翻译,或者我能想到的任何其他内容。
假设您使用过PHP 。 您可以像这样获得IP ...
function getUserIpAddr() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
用于获取信息的cURL:
$url = "https://api.ipgeolocationapi.com/geolocate/184.149.48.32";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
它以JSON形式返回,因此:
$json = json_decode($result);
然后$json->{'name'};
如果我在加拿大,将会是“加拿大”。
所以我可以这样:
if ($json->{'name'} == "Canada") {
// serve index-ca.php
} else {
// server index.php
}
翻译自: https://css-tricks.com/get-geographic-information-from-an-ip-address-for-free/
根据ip地址获取地理位置