Я хотел бы прочитать свой ip-адрес со следующей страницы (http://l2.io/ip или другой) с помощью javascript и сохранить его в моей переменной "myIp".
function getMyIP() {
var myIp;
...
return myIp;
}
Как это можно сделать?
Проверяя свой связанный сайт, вы можете включить тег скрипта, передающий параметр ?var=desiredVarName
, который будет установлен как глобальная переменная, содержащая IP-адрес:
<script type="text/javascript" src="http://l2.io/ip.js?var=myip"></script>
<!-- ^^^^ -->
<script>alert(myip);</script>
[Demo][2]
Думаю, мне не нужно говорить, что это можно легко подделать (с помощью прокси-серверов или поддельных заголовков запросов), но в любом случае это стоит отметить.
Если ваша страница обслуживается по протоколу https
, большинство браузеров блокируют содержимое той же страницы, обслуживаемой по протоколу http
(включая скрипты и изображения), поэтому возможности довольно ограничены. Если у вас < 5k хитов/день, можно использовать Smart IP API. Например:
<script>
var myip;
function ip_callback(o) {
myip = o.host;
}
</script>
<script src="https://smart-ip.net/geoip-json?callback=ip_callback"></script>
<script>alert(myip);</script>
[Demo][4]
Edit: Судя по всему, срок действия сертификата этого сервиса https
истек, поэтому пользователю придется добавлять исключение вручную. Откройте его API напрямую, чтобы проверить состояние сертификата: https://smart-ip.net/geoip-json.
Наиболее устойчивым и простым способом, в случае, если у вас есть логика внутреннего сервера, будет просто вывести IP запрашивающего пользователя внутри тега <script>
, таким образом, вам не нужно будет полагаться на внешние ресурсы. Например:
PHP:
<script>var myip = '<?php echo $_SERVER['REMOTE_ADDR']; ?>';</script>
В этом связанном ответе также есть более надежное PHP-решение (с учетом заголовков, которые иногда устанавливаются прокси-серверами).
C#:
<script>var myip = '<%= Request.UserHostAddress %>';</script>
Это также позволяет получить информацию о клиенте.
var get = function(u){
var x = new XMLHttpRequest;
x.open('GET', u, false);
x.send();
return x.responseText;
}
JSON.parse(get('http://ifconfig.me/all.json'))