Найти - Пользователи
Полная версия: urllib2, ошибка запроса/ответа http
Начало » Web » urllib2, ошибка запроса/ответа http
1
bat
Здравствуйте! Помогите пожалуйста подпилить код, который выкидывает содержимое страницы, для адреса 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")
Андрей Светлов
Очевидно, вам нужно авторизироваться, указав логин и пароль.

P.S. не делайте urllib2.install_opener, не нужно.
Вместо этого в .request вызывайте self.opener.open(…)
bat
Андрей Светлов
Очевидно, вам нужно авторизироваться, указав логин и пароль.
неа, эта страница грузится и так, логин и пароль там нужено в другой скрипт посылать, но суть в том, что не грузится просто страница с этого сервера. Если я посылаю логин и пароль по нужному адресу, то все равно та же ошибка:
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(…)
а можно поподробнее, я еще в питоне новичек, до таких вещей не дошел)
Андрей Светлов
Ваш сайт хотел дополнительные заголовки. Какие точно - не знаю, скопировал что 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")
bat
Спасибо огромное. Действительно, в заголовках дело.
Lunar
а еще спросить хотел, этот метод .request (self.opener.open) возвращает какой тип? строку?
Андрей Светлов
.request - строку (что не всегда удобно)
self.opener.open - addinfourl (читайте документацию)
alexZaharov
встретился с похожей проблемой.
При использовании 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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB