擅长:python、mysql、java
<p>同样的问题,根据J.J.提供的信息,这里有一个丑陋的黑客攻击(风险自负)。</p>
<p>这基本上是将<code>socket.getaddrinfo(..)</code>的<code>family</code>参数强制为<code>socket.AF_INET</code>,而不是使用<code>socket.AF_UNSPEC</code>(零,这似乎是在<code>socket.create_connection</code>中使用的),这不仅适用于来自<code>urllib2</code>的调用,而且也适用于对<code>socket.getaddrinfo(..)</code>的所有调用:</p>
<pre><code>#--------------------
# do this once at program startup
#--------------------
import socket
origGetAddrInfo = socket.getaddrinfo
def getAddrInfoWrapper(host, port, family=0, socktype=0, proto=0, flags=0):
return origGetAddrInfo(host, port, socket.AF_INET, socktype, proto, flags)
# replace the original socket.getaddrinfo by our version
socket.getaddrinfo = getAddrInfoWrapper
#--------------------
import urllib2
print urllib2.urlopen("http://python.org/").read(100)
</code></pre>
<p>至少在这个简单的例子中,这对我有效。</p>