2012-02-01 3 views
1

, когда я работаю с модулем urllib2 не в функции все работает хорошо (здесь код):Работа с urllib2 в функции

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7'} 
request = urllib2.Request(url, '', headers) 
response = urllib2.urlopen(request) 
returned_array = [response.geturl(), response.read()] 
print returned_array 

но когда я поставил это функции:

def nk_get_site(url): 
    headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7'} 
    request = urllib2.Request(url, '', headers) 
    response = urllib2.urlopen(request) 
    returned_array = [response.geturl(), response.read()] 
    return returned_array 

его dont work, error:

Traceback (most recent call last): 
File "C:\py\NetKit\netkit.py", line 37, in <module> 
print nk_get_site('http://www.google.com/') 
File "C:\py\NetKit\netkit.py", line 33, in nk_get_site 
response = urllib2.urlopen(request) 
File "C:\Python27\lib\urllib2.py", line 126, in urlopen 
return _opener.open(url, data, timeout) 
File "C:\Python27\lib\urllib2.py", line 400, in open 
response = meth(req, response) 
File "C:\Python27\lib\urllib2.py", line 513, in http_response 
'http', request, response, code, msg, hdrs) 
File "C:\Python27\lib\urllib2.py", line 438, in error 
return self._call_chain(*args) 
File "C:\Python27\lib\urllib2.py", line 372, in _call_chain 
result = func(*args) 
File "C:\Python27\lib\urllib2.py", line 521, in http_error_default 
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
HTTPError: HTTP Error 405: Method Not Allowed 

ответ

5

Это не имеет никакого отношения к тому, что вы помещаете код в функцию, и все, что связано с URL вы тестируете:

>>> headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7'} 
>>> request = urllib2.Request(url, '', headers) 
>>> response = urllib2.urlopen(request) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python25\lib\urllib2.py", line 124, in urlopen 
    return _opener.open(url, data) 
    File "C:\Python25\lib\urllib2.py", line 387, in open 
    response = meth(req, response) 
    File "C:\Python25\lib\urllib2.py", line 498, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "C:\Python25\lib\urllib2.py", line 425, in error 
    return self._call_chain(*args) 
    File "C:\Python25\lib\urllib2.py", line 360, in _call_chain 
    result = func(*args) 
    File "C:\Python25\lib\urllib2.py", line 506, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
urllib2.HTTPError: HTTP Error 405: Method Not Allowed 

Пропустив '' параметру data, вы превратить его в POST запрос. Если вы просто хотите передать заголовки по запросу GET, вы должны использовать это:

request = urllib2.Request(url, headers=headers) 
+0

так почему я не могу загрузить google.com? – Michal

+1

Потому что вы передаете '' '' как параметр 'data', который превращает его в запрос' POST', который не принимается на главной странице Google. – Amber

+0

Вот, см. Мое редактирование для правильного способа делать то, что, как я думаю, вы пытаетесь сделать. – Amber

Смежные вопросы