как заставить библиотеку python httplib использовать только запросы

StackOverflow https://stackoverflow.com/questions/1540749

  •  20-09-2019
  •  | 
  •  

Вопрос

Проблема в том, что urllib, использующий httplib, запрашивает записи 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]
Это было полезно?

Решение

Правильный ответ таков:

http://docs.python.org/library/socket.html

Библиотека сокетов Python использует следующее:

сокет.сокет([семейство[, тип[, 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.

Помните, что кэширование результатов разрешения в вашем приложении - ДЕЙСТВИТЕЛЬНО ПЛОХАЯ ИДЕЯ.Никогда не делай этого!

Другие советы

Смотри сюда: как-разрешить-srv-запись в Python

Как только вы определите правильный IP-адрес A, используйте его в своем запросе вместо DNS.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top