2014-12-09 3 views
3

urllib3에서 사용자 에이전트 정보를 업데이트하는 올바른 방법은 무엇입니까?urllib3 지정된 사용자 에이전트를 사용하여 파일을 다운로드하십시오.

사용자 에이전트 정보가 실제로 변경되어 사용되고 있는지 어떻게 확인할 수 있습니까? 예를 들어

:

user_agent = {'user-agent': 'Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0'} 
http = urllib3.PoolManager(10, headers=user_agent) 

r1 = http.request('GET', 'http://example.com/') 
if r1.status is 200: 
    with open('somefile','w+') as f: 
     f.write(r1.data) 

내가 dir(http)에 의해 그것을보고 및 http.headers은 기본적으로 비어 지정된 사용자 에이전트 정보로 업데이트 된 것을보고 있지만, 사용중인 PoolManagerhttp에서 생성? 어쨌든 apache 로그를 보지 않고도 확인 할 수 있습니까? 사용자 에이전트를 업데이트하려고 후 /var/log/apache2/access.log을 확인

그리고 실제로 :

>>> import urllib3 
>>> user_agent = {'user-agent': 'Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0'} 
>>> http = urllib3.PoolManager(2, headers=user_agent) 
>>> r = http.request('GET','localhost') 
>>> with open('/var/log/apache2/access.log','r') as f: 
...  last_line = f.readlines()[-1] 
... 
>>> last_line 
'127.0.0.1 - - [08/Dec/2014:20:42:04 -0500] "GET/HTTP/1.1" 200 461 "-" "-"\n' 
+0

사용자 에이전트를 공격 할 때 사용자 에이전트를 표시하는 웹 사이트가 많이 있습니다. 그 중 하나를 다운로드 해보십시오. – Kevin

답변

7

header 인수는 headers해야한다 :

http = urllib3.PoolManager(10, header=user_agent) 

당신은 헤더가 같은 사이트를 사용하여 올바르게 설정되었는지 확인 할 수 있습니다 httpbin.org :

>>> import urllib3 
>>> user_agent = {'user-agent': 'Mozilla/5.0 (Windows NT 6.3; rv:36.0) ..'} 
>>> http = urllib3.PoolManager(10, headers=user_agent) 
>>> r1 = http.urlopen('GET', 'http://httpbin.org/headers') 
>>> print(r1.data) 
{ 
    "headers": { 
    "Accept-Encoding": "identity", 
    "Connect-Time": "1", 
    "Connection": "close", 
    "Host": "httpbin.org", 
    "Total-Route-Time": "0", 
    "User-Agent": "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0", 
    "Via": "1.1 vegur", 
    "X-Request-Id": "5ef53f21-6caf-4e45-8123-98e417cd05ba" 
    } 
} 

또는 패킷 분석기 (예 : Wireshark).

+0

'HTTPResponse' 객체에서 특정 헤더의 값을 변경하는 방법은 무엇입니까? – Sajad

+0

@SajadHTLO,'HTTPResponse'? 아니, 불가능 해. – falsetru