파이썬 httplib 라이브러리를 강제하는 방법 요청 만 사용하도록

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

  •  20-09-2019
  •  | 
  •  

문제

문제는 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]
도움이 되었습니까?

해결책

정답은 다음과 같습니다.

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

파이썬 소켓 라이브러리는 다음을 사용합니다.

socket.socket ([family [, type [, proto]]]) 주어진 주소 패밀리, 소켓 유형 및 프로토콜 번호를 사용하여 새 소켓을 만듭니다. 주소 패밀리는 AF_INET (기본값), AF_INET6 또는 AF_UNIX 여야합니다. 소켓 유형은 SOCK_STREAM (기본값), SOCK_DGRAM 또는 다른 SOCK_ 상수 중 하나 여야합니다. 프로토콜 번호는 일반적으로 0 이며이 경우 생략 될 수 있습니다.

/* Supported address families. */
#define AF_UNSPEC       0
#define AF_INET         2       /* Internet IP Protocol         */
#define AF_INET6        10      /* IP version 6                 */

기본적으로 0을 사용하고 있으며 2로 호출하면 레코드에 대해서만 쿼리됩니다.

앱에서 Resolv 결과를 캐싱하는 것은 정말 나쁜 생각입니다. 절대하지 마십시오!

다른 팁

이봐: How-I-Resolve-an-srv-record-in-python

올바른 IP를 해결하면 DNS 대신 요청에 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top