2010-12-04 7 views
1

J'ai besoin d'obtenir des informations sur les pays du pays en utilisant le classique ASP 3.0, j'utilise le code ci-dessous mais il me renvoie XX au lieu du nom du pays. des suggestions/aide à ce sujet.Obtenez l'information du pays du visiteur en utilisant ASP classique

<% 
     URL = "http://api.hostip.info/country.php?ip=" & Request.ServerVariables("REMOTE_ADDR") 
     Set conn = Server.CreateObject("MSXML2.ServerXMLHTTP") 
     conn.open "GET", URL, False, "", "" 
     conn.send 
     UserCountry = conn.ResponseText   
     Response.Write(UserCountry) 

%> 

J'ai également mis en place une page pour la vue qui contient le code ci-dessus.

http://www.datingmaze.co.uk/rac.asp

Si j'essaie http://api.hostip.info/country.php?ip=12.215.42.19 il me donne une sortie correcte, mais si je l'ai essayé http://api.hostip.info/country.php?ip=119.152.136.247 me donne la mauvaise sortie de dire XX bien que je fourni l'adresse IP correcte.

merci d'avance.

Répondre

2

Vous pouvez utiliser GeoIP pour cela.

Ils ont une API COM libre que vous pouvez utiliser:

<% 
if Request.Form("values") = "Test Values" then 
hostname = "www.yahoo.com" 
else 
    hostname = Request.Form("hostname") 
end if 

if Request.Form("submit") = "Submit" then 

    set geoip = Server.CreateObject("GeoIPCOMEx.GeoIPEx") 

    geoip.set_db_path("C:\Program Files\GeoIP\") 
geoip.find_by_name(hostname) 
city = geoip.city 

    Response.Write("<table cellpadding=2 border=1><tr><th colspan=2>Results</th></tr>") 
    Response.Write("<tr><td>Hostname</td><td>" + hostname + "</td></tr>") 
    Response.Write("<tr><td>GeoIP City Value</td><td>" + city + "</td></tr>") 
    Response.Write("</table>") 
end if 
%> 

http://www.maxmind.com/app/com

http://www.maxmind.com/GeoIP-COM-1.3.zip

Leur API COM expose les éléments suivants:

Methods: 
bool set_db_path(string path) (must be set before any other operations, true if all dbs found) 
bool find_by_addr(string ipvalue) (return true if address found, sets all properties) 
bool find_by_name(string dns_name) (-"-) 

Les données que vous recevrait après recherche:

Properties: 
country_code (2 chars; "LN" if non-routed addr, "LH" if localhost) 
country_code3 (3 chars) 
country_name ("Local Area Network" if non-routed addr,"Localhost" if localhost) 
region (2 chars, state abbrev for US/Canada, FIPS 10-4 region code for others) 
city 
postal_code (max 6 chars, US and Canada only) 
latitude (real number) 
longitude (real number) 
dma_code (integer) 
area_code (integer) 

Donc, au lieu d'utiliser find_by_name, vous utiliserez find_by_addr. Ce qui rechercherait le pays basé sur une adresse IPv4.

Ceci est une meilleure solution car il peut être risqué de s'appuyer sur des fournisseurs tiers distants. Leur site pourrait aller vers le bas, sous forte charge, etc.

Vous pouvez télécharger la version gratuite de leur base de données IP/Pays ici:

http://www.maxmind.com/app/geolitecountry

Questions connexes