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

发布于 2021-01-29 14:09:55

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

关注者
0
被浏览
175
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。
    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断开连接,以便成功。但是,这似乎是更多的工作,而不是值得的。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看