πΠΠ°ΠΊ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Π΅ΠΉ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Javascript?
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²Π΅Π±-ΡΠ°ΠΉΡΠΎΠ² ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Π΅ΠΉ β Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΈΡΡΡ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΡΠ΄Π° ΠΏΠΎΠΏΠ°Π»ΠΈ.
ΠΠΎ Ρ Π»ΡΠ΄Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠ΅ΡΠ°ΡΡ Π²Π°Ρ Π²Π΅Π±-ΡΠ°ΠΉΡ, ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅Π»ΠΈ. ΠΠ΄Π½ΠΈ Ρ ΠΎΡΡΡ ΡΡΠΎ-ΡΠΎ ΠΊΡΠΏΠΈΡΡ, Π΄ΡΡΠ³ΠΈΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡΠΌΠΈ. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΡΠ°ΡΡΡΡ Π½Π°ΠΉΡΠΈ Π²ΡΡ ΠΎΠ΄, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ Π½Π΅ Π·Π½Π°ΡΡ, Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ΠΈ Π·Π΄Π΅ΡΡ.
ΠΠΎΡΠ΅ΠΌΡ Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π²Π΅Π±-ΡΠ°ΠΉΡΠ° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ?
ΠΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ Π΄Π»Ρ Π»ΡΠ΄Π΅ΠΉ ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΡΡΡΠ°Π½.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΠ΅Π½Ρ Π² ΠΌΠ΅ΡΡΠ½ΠΎΠΉ Π²Π°Π»ΡΡΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²Π°ΡΠΈΠΌ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»ΡΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΡΠΊΠ°ΡΡ ΠΎΠ±ΠΌΠ΅Π½Π½ΡΠ΅ ΠΊΡΡΡΡ. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΎΠ½ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΏΠΎΠΊΡΠΏΠΊΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ.
ΠΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π»ΡΠ΄ΡΠΌ ΡΠ΅ΠΊΠ»Π°ΠΌΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΈΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ? ΠΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠΉ ΠΈΠ΄Π΅Π΅ΠΉ, ΠΈ ΠΎΠ½Π° Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°ΠΌΠΏΠ°Π½ΠΈΠΉ Ρ Π³Π΅ΠΎΡΠ°ΡΠ³Π΅ΡΠΈΠ½Π³ΠΎΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠ².
ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ΄Π°ΠΆ.
ΠΠ΅Π΄Π°Π²Π½ΠΎ ΠΌΡ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ ΠΠ΅Π±-ΡΠ°ΠΉΡ Ρ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ COVID-19 Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ Π΄Π»Ρ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π΅Π³ΠΎ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΡΠΎΠ²Π΅ΡΡ ΠΈΡ . ΠΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π»ΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ ΠΏΠΎ Π²Π°ΡΠ΅ΠΉ ΡΡΡΠ°Π½Π΅?
ΠΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²Π°Ρ ΡΠ°ΠΉΡ ΠΌΠ΅ΡΡΠΎΠ½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ?
ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ:
- API Π³Π΅ΠΎΠ»ΠΎΠΊΠ°ΡΠΈΠΈ
- API IP-Π³Π΅ΠΎΠ»ΠΎΠΊΠ°ΡΠΈΠΈ
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠΊΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ CloudFlare Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ
ΠΠ΅ΠΎΠ»ΠΎΠΊΠ°ΡΠΈΡ
API Π³Π΅ΠΎΠ»ΠΎΠΊΠ°ΡΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΡ Π΄Π΅Π»ΠΈΡΡΡΡ Ρ Π²Π°ΠΌΠΈ ΡΠ²ΠΎΠΈΠΌ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° Ρ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ, Π½Π΅ Ρ ΠΎΡΡΡ Π»ΠΈ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ Π²Π°ΡΠΈΠΌ ΡΠ°ΠΉΡΠΎΠΌ. ΠΡΠ²ΠΎΠ΄ ΠΊΠΎΠ΄Π° Π΄Π°Π΅Ρ Π½Π°ΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ.
{
"location": {
"lat": 33.3632256,
"lng": -117.0874871
},
"accuracy": 20
}
Π ΡΠ»ΡΡΠ°Π΅ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ° Ρ Π²Π°Ρ Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·Π½Π°ΡΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
API-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ IP-Π³Π΅ΠΎΠ»ΠΎΠΊΠ°ΡΠΈΠΈ
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ·Π½Π°ΡΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ»Π°ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° API, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π½Π° API-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ IP-Π³Π΅ΠΎΠ»ΠΎΠΊΠ°ΡΠΈΠΈ .
ΠΠΎΠ½Π΅ΡΠ½Π°Ρ ΡΠΎΡΠΊΠ° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Cloudflare
Π― ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ!
CloudFlare ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°ΠΉΡΠ΅, ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠΌ Π½Π° ΠΈΡ
Π΄ΠΎΠΌΠ΅Π½Π΅, ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ /cdn-cgi/trace
ΠΊΠΎΠ½Π΅ΡΠ½Π°Ρ ΡΠΎΡΠΊΠ°.
ΠΠΎΡΠ»Π΅ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° Π²ΡΠ²ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
fl=xxxxx
h=www.cloudflare.com
ip=xxx.xxx.xxx.xxx
ts=1589224733.208
visit_scheme=https
uag=Mozilla/5.0 ...
colo=PRG
http=http/2
loc=SK
tls=TLSv1.3
sni=plaintext
warp=off
Π, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠΈΡΡΡΠΉ Javascript, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Cloudflare ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ IP-Π°Π΄ΡΠ΅Ρ ΠΈ ΡΡΡΠ°Π½Ρ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ.
const countryCodeExpression = /loc=([\w]{2})/;
const userIPExpression = /ip=([\w\.]+)/;
function initCountry() {
return new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.timeout = 3000;
xhr.onreadystatechange = function () {
if (this.readyState == 4) {
if (this.status == 200) {
countryCode = countryCodeExpression.exec(this.responseText)
ip = userIPExpression.exec(this.responseText)
if (countryCode === null || countryCode[1] === '' ||
ip === null || ip[1] === '') {
reject('IP/Country code detection failed');
}
let result = {
"countryCode": countryCode[1],
"IP": ip[1]
};
resolve(result)
} else {
reject(xhr.status)
}
}
}
xhr.ontimeout = function () {
reject('timeout')
}
xhr.open('GET', '', true);
xhr.send();
});
}
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΡΠΎΠ½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ.
initCountry().then(result => console.log(JSON.stringify(result))).catch(e => console.log(e))
{"countryCode":"SK","IP":"xxx.xxx.xxx.xxx"}
ΠΡΠΎ Π²ΡΠ΅. Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ ΠΈ Π³Π΅ΠΎΠ»ΠΎΠΊΠ°ΡΠΈΠΈ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΡΡΠ΅Π½ΠΈΠ΅!