一尘不染

连接urllib2后如何确定服务器的IP地址?

python

我正在使用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地址。


阅读 218

收藏
2021-01-20

共1个答案

一尘不染

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地址。

对于给定的主机名,某些主机可能具有多个IP地址,因此仍然有可能由另一台服务器满足该请求,但这与您将要完成的接近。一个gethostbynameURL请求后权还是要用你的DNS缓存,除非你正在处理一个时间到现场的,像1秒,你会越来越您刚刚使用同一台服务器。

如果这还不够,您 可以
剥离线程并做lsof一会儿仍连接到远程服务器的操作。我相信您可以说服您暂时urllib2断开连接,以便成功。但是,这似乎是更多的工作,而不是值得的。

2021-01-20