comment forcer bibliothèque httplib python pour utiliser uniquement A la demande
Question
Le problème est que urllib à l'aide httplib est Interrogation des enregistrements AAAA.
Je voudrais éviter cela. Y at-il une bonne façon de le faire?
>>> 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]
La solution
La bonne réponse est:
http://docs.python.org/library/socket.html
La bibliothèque de prise de Python utilise ce qui suit:
socket.socket ([famille [type [proto]]]) Créer un nouveau socket en utilisant la famille d'adresse indiquée, le type de prise et le numéro de protocole. La famille d'adresse doit être AF_INET (par défaut), ou AF_INET6 AF_UNIX. Le type de prise de courant doit être SOCK_STREAM (valeur par défaut), SOCK_DGRAM ou peut-être l'une des autres constantes de SOCK_. Le numéro de protocole est généralement nul et peut être omise dans ce cas.
/* Supported address families. */
#define AF_UNSPEC 0
#define AF_INET 2 /* Internet IP Protocol */
#define AF_INET6 10 /* IP version 6 */
Par défaut, il utilise 0 et si vous l'appelez avec 2 il interrogera uniquement pour les enregistrements.
Rappelez-vous la mise en cache des résultats de Resolv dans votre application est une très mauvaise idée. Ne jamais le faire!
Autres conseils
Regardez ici: how-do-i-resolve- un-SRV-fiche en python
Une fois que vous avez résolu le bon d'une adresse IP, l'utiliser dans votre demande, au lieu du dns.