Уведомления

Группа в Telegram: присоединиться | Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Янв. 2, 2011 21:28:54

bat
От:
Зарегистрирован: 2011-01-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2, ошибка запроса/ответа http

Здравствуйте! Помогите пожалуйста подпилить код, который выкидывает содержимое страницы, для адреса https://stat.byfly.by/cgi-bin/cgi.exe?function=is_newlog , а то выкидывает HTTP Error 403: Forbidden

import urllib, urllib2, cookielib

class atape_http_client:
def __init__(self, proxy=None, user_agent='Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3'):
self.cookie_handler = urllib2.HTTPCookieProcessor(cookielib.CookieJar())
self.redirect_handler = urllib2.HTTPRedirectHandler()
self.http_handler = urllib2.HTTPHandler()
self.https_handler = urllib2.HTTPSHandler()

self.opener = urllib2.build_opener(self.http_handler,
self.https_handler,
self.cookie_handler,
self.redirect_handler)

if proxy:
self.proxy_handler = urllib2.ProxyHandler(proxy)
self.opener.add_handler(self.proxy_handler)

self.opener.addheaders = [('User-agent', user_agent)]

urllib2.install_opener(self.opener)

def request(self, url, params={}, timeout=60):
if params:
params = urllib.urlencode(params)
html = urllib2.urlopen(url, params, timeout)
else:
html = urllib2.urlopen(url)

return html.read()


bot = atape_http_client()
params = {}

print bot.request("https://stat.byfly.by/cgi-bin/cgi.exe?function=is_newlog")



Отредактировано (Янв. 2, 2011 21:29:42)

Офлайн

#2 Янв. 2, 2011 22:54:32

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

urllib2, ошибка запроса/ответа http

Очевидно, вам нужно авторизироваться, указав логин и пароль.

P.S. не делайте urllib2.install_opener, не нужно.
Вместо этого в .request вызывайте self.opener.open(…)



Офлайн

#3 Янв. 2, 2011 23:33:34

bat
От:
Зарегистрирован: 2011-01-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2, ошибка запроса/ответа http

Андрей Светлов
Очевидно, вам нужно авторизироваться, указав логин и пароль.
неа, эта страница грузится и так, логин и пароль там нужено в другой скрипт посылать, но суть в том, что не грузится просто страница с этого сервера. Если я посылаю логин и пароль по нужному адресу, то все равно та же ошибка:
File “/usr/lib/python2.6/urllib2.py”, line 518, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden


Андрей Светлов
Вместо этого в .request вызывайте self.opener.open(…)
а можно поподробнее, я еще в питоне новичек, до таких вещей не дошел)



Офлайн

#4 Янв. 3, 2011 10:34:04

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

urllib2, ошибка запроса/ответа http

Ваш сайт хотел дополнительные заголовки. Какие точно - не знаю, скопировал что firefox шлет.

import urllib, urllib2, cookielib

class atape_http_client(object):
def __init__(self, proxy=None, user_agent='Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3'):
self.cookie_handler = urllib2.HTTPCookieProcessor(cookielib.CookieJar())
self.redirect_handler = urllib2.HTTPRedirectHandler()
self.http_handler = urllib2.HTTPHandler()
self.https_handler = urllib2.HTTPSHandler()

self.opener = urllib2.build_opener(self.http_handler,
self.https_handler,
self.cookie_handler,
self.redirect_handler)

if proxy:
self.proxy_handler = urllib2.ProxyHandler(proxy)
self.opener.add_handler(self.proxy_handler)

self.opener.addheaders = [('User-agent', user_agent),
('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
('Accept-Language', 'en-us,en,;q=0.5'),
('Accept-Encoding', 'gzip,deflate'),
('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*,q=0.7')]

def request(self, url, params={}, timeout=60):
if params:
params = urllib.urlencode(params)
html = self.opener.open(url, params, timeout)
else:
html = self.opener.open(url)

return html.read()


bot = atape_http_client()
params = {}

print bot.request("https://stat.byfly.by/cgi-bin/cgi.exe?function=is_newlog")



Офлайн

#5 Янв. 3, 2011 20:18:28

bat
От:
Зарегистрирован: 2011-01-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2, ошибка запроса/ответа http

Спасибо огромное. Действительно, в заголовках дело.



Офлайн

#6 Янв. 4, 2011 11:30:04

Lunar
От:
Зарегистрирован: 2010-08-10
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2, ошибка запроса/ответа http

а еще спросить хотел, этот метод .request (self.opener.open) возвращает какой тип? строку?



Офлайн

#7 Янв. 4, 2011 11:51:34

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

urllib2, ошибка запроса/ответа http

.request - строку (что не всегда удобно)
self.opener.open - addinfourl (читайте документацию)



Офлайн

#8 Окт. 23, 2017 18:53:24

alexZaharov
Зарегистрирован: 2017-10-23
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2, ошибка запроса/ответа http

встретился с похожей проблемой.
При использовании urllib.request.urlopen(url)
выдает ошибки:

Traceback (most recent call last):
File “<pyshell#2>”, line 1, in <module>
f = urllib.request.urlopen(url)
File “E:\pithon\lib\urllib\request.py”, line 191, in urlopen
return opener.open(url, data, timeout)
File “E:\pithon\lib\urllib\request.py”, line 495, in open
response = meth(req, response)
File “E:\pithon\lib\urllib\request.py”, line 603, in http_response
‘http’, request, response, code, msg, hdrs)
File “E:\pithon\lib\urllib\request.py”, line 533, in error
return self._call_chain(*args)
File “E:\pithon\lib\urllib\request.py”, line 467, in _call_chain
result = func(*args)
File “E:\pithon\lib\urllib\request.py”, line 611, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

вот код:

import urllib.request, urllib.parse, urllib.error

url = 'http://www.py4e.com/code3/mbox.txt'
f = urllib.request.urlopen(url).read()
print(f)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version