我正在使用urllib2从服务器下载数据。但是我需要确定所连接服务器的IP地址。
import urllib2 STD_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9, */*;q=0.8', 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'Accept-Language': 'en-us,en;q=0.5', 'User-Agent': 'Mozilla/5.0 (X11; U; Linux x86_64;en-US;rv:1.9.2.12) Gecko/20101028 Firefox/3.6.12'} request = urllib2.Request(url, None, STD_HEADERS) data = urllib2.urlopen(request)
请不要要求我使用URL查找IP地址,因为这不能保证从中下载数据的服务器和IP地址查询在使用“ HTTPRedirects”或负载平衡服务器时都解析为相同的IP地址。
import urllib2, socket, urlparse # set up your request as before, then: data = urllib2.urlopen(request) addr = socket.gethostbyname(urlparse.urlparse(data.geturl()).hostname)
data.geturl()在进行任何重定向之后,返回用于实际检索资源的URL。然后,将主机名移出urlparse并移交socket.gethostbyname以获得IP地址。
data.geturl()
urlparse
socket.gethostbyname
对于给定的主机名,某些主机可能具有多个IP地址,因此仍然有可能由另一台服务器满足该请求,但这与您将要完成的接近。一个gethostbynameURL请求后权还是要用你的DNS缓存,除非你正在处理一个时间到现场的,像1秒,你会越来越您刚刚使用同一台服务器。
gethostbyname
如果这还不够,您 可以 剥离线程并做lsof一会儿仍连接到远程服务器的操作。我相信您可以说服您暂时urllib2断开连接,以便成功。但是,这似乎是更多的工作,而不是值得的。
lsof
urllib2