我需要使用经典的asp 3.0获取访问者的国家/地区信息,我使用下面的代码,但它返回XX而不是国家/地区名称。对此有任何建议/帮助。
<%
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)
%>
我还设置了一个包含上述代码的视图页面。
http://www.datingmaze.co.uk/rac.asp
如果我尝试http://api.hostip.info/country.php?ip=12.215.42.19它会给我正确的输出,但是如果我尝试http://api.hostip.info/country.php?ip=119.152.136.247给了我错误的输出,即XX虽然我提供了正确的IP地址。
提前感谢。
答案 0 :(得分:2)
您可以使用GeoIP。
他们有一个免费的COM API,您可以使用:
<%
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
他们的COM API公开以下内容:
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) (-"-)
查找后您将收到的数据:
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)
因此,不使用find_by_name,而是使用find_by_addr。哪个会根据IPv4地址查找国家/地区。
这是一个更好的解决方案,因为依赖远程第三方提供商可能存在风险。他们的网站可能会出现故障,负载过重等等。
您可以在此处下载其IP /国家/地区数据库的免费版本: