如何强制python httplib库仅使用请求

如何强制python httplib库仅使用请求,python,dns,ipv6,ipv4,Python,Dns,Ipv6,Ipv4,问题是使用httplib的urllib正在查询AAAA记录 我想避免这种情况。有什么好办法吗 >>> import socket >>> socket.gethostbyname('www.python.org') '82.94.164.162' 21:52:37.302028 IP 192.168.0.9.44992 > 192.168.0.1.53: 27463+ A? www.python.org. (32) 21:52:37.312031 I

问题是使用httplib的urllib正在查询AAAA记录

我想避免这种情况。有什么好办法吗

>>> import socket
>>> socket.gethostbyname('www.python.org')
'82.94.164.162'


21:52:37.302028 IP 192.168.0.9.44992 > 192.168.0.1.53: 27463+ A? www.python.org. (32)
21:52:37.312031 IP 192.168.0.1.53 > 192.168.0.9.44992: 27463 1/0/0 A 82.94.164.162 (48)


 python /usr/lib/python2.6/urllib.py -t http://www.python.org >/dev/null 2>&1

 21:53:44.118314 IP 192.168.0.9.40669 > 192.168.0.1.53: 32354+ A? www.python.org. (32)
21:53:44.118647 IP 192.168.0.9.40669 > 192.168.0.1.53: 50414+ AAAA? www.python.org. (32)
21:53:44.122547 IP 192.168.0.1.53 > 192.168.0.9.40669: 32354 1/0/0 A 82.94.164.162 (48)
21:53:44.135215 IP 192.168.0.1.53 > 192.168.0.9.40669: 50414 1/0/0 AAAA[|domain]
看这里:

解析正确的ip后,请在请求中使用它,而不是dns。

正确答案是:

Python套接字库正在使用以下内容:

socket.socket([family[,type[,proto]])) 使用给定的地址族、套接字类型和协议号创建新套接字。地址族应该是AF_INET(默认)、AF_INET6或AF_UNIX。套接字类型应为SOCK_STREAM(默认)、SOCK_DGRAM或其他SOCK_常量之一。协议号通常为零,在这种情况下可以省略

/* Supported address families. */
#define AF_UNSPEC       0
#define AF_INET         2       /* Internet IP Protocol         */
#define AF_INET6        10      /* IP version 6                 */
默认情况下,它使用0,如果使用2调用它,它将只查询A记录


请记住,在应用程序中缓存resolv结果是一个非常糟糕的主意。永远不要这样做

不是真的,这是一个坏习惯,例如,如果你有一个TTL60秒的a记录,你必须在你的代码中尊重它,如果他们同时更改IP会发生什么?你的程序会失败,没有人知道原因