2014-07-18 3 views
0

일부 libs (예 : urllib2 또는 requests)와 함께 파이썬 스크립트를 사용하여 웹 페이지를 가져 오는 경우 해당 파이썬 env에서 지정된 IP에 도메인을 바인딩 할 수 있습니까?파이썬에서 도메인을 특정 IP에 바인딩 할 수 있습니까?

hosts 파일에서 도메인을 IP에 바인딩 할 수 있다는 것을 알고 있었지만 일부 컴퓨터에서 실행중인 다른 프로세스에 영향을줍니다. 내가 IP에 도메인을 결합 할 수있는 방법을 발견하고

단지 같이, 내 파이썬 스크립트에 영향을

import requests 
bind_domain2IP(DOMAIN, IP) 
r = requests.get(DOMAIN) 

는 사람이에 대한 경험이 있습니까? 제안 사항에 대해 감사드립니다.

+0

당신이 할 수있는 원래의 호스트 이름으로 설정 호스트 HTTP 헤더와 IP 주소로 직접 연결할 수 있습니다 sqlite를 사용하여 스크립트에 대해서만 작동하도록 값을 바인딩하거나 dictonary를 사용하십시오. –

답변

1

네,하지만 다소 발전했습니다. requests을 사용하는 경우 주어진 도메인에 대해 Transport Adapter을 구성하여 해당 http 요청이 처리되는 방식을 제어 할 수 있습니다.

예를 들어 사용자 정의 HTTPAdapter을 작성하고 어댑터에서 get_connection()을 대체하면 제공된 원래의 도메인보다는 사용자가 선택한 특정 IP에 urllib3 연결을 설정할 수 있습니다.

간단한 방법에
+0

감사합니다. – WKPlus

0

, 당신은 도메인/IP 협회와 사전을 사용하고>

가져 오기 요청

hosts = { 
    'webserver.local': '192.168.1.1' 
} 

def myreq(hostname, path): 
    headers = {} 
    if hostname in hosts: 
     headers['Host'] = hostname 
     hostname = hosts[hostname] 
    url = 'http://%s%s' % (hostname, path) 
    return requests.get(url, headers=headers) 

r = myreq('webserver.local', '/index.html') 
+0

어, 이것에 대해 생각해 봤습니다. 그러나 302 리디렉션에 도메인이 포함 된 링크가 있으면 어떻게해야합니까? 이 방법으로 도메인을 ip로 매핑 할 수 없습니다. – WKPlus

+0

그러면 앞의 대답에서 설명한 것처럼 get_connection() 내부에서이 논리를 사용할 수 있습니다. – denisvm

관련 문제