Форум сайта python.su
Здравствуйте! Помогите пожалуйста подпилить код, который выкидывает содержимое страницы, для адреса 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)
Офлайн
Очевидно, вам нужно авторизироваться, указав логин и пароль.
P.S. не делайте urllib2.install_opener, не нужно.
Вместо этого в .request вызывайте self.opener.open(…)
Офлайн
Андрей Светловнеа, эта страница грузится и так, логин и пароль там нужено в другой скрипт посылать, но суть в том, что не грузится просто страница с этого сервера. Если я посылаю логин и пароль по нужному адресу, то все равно та же ошибка:
Очевидно, вам нужно авторизироваться, указав логин и пароль.
Андрей Светлова можно поподробнее, я еще в питоне новичек, до таких вещей не дошел)
Вместо этого в .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")
Офлайн
Спасибо огромное. Действительно, в заголовках дело.
Офлайн
а еще спросить хотел, этот метод .request (self.opener.open) возвращает какой тип? строку?
Офлайн
.request - строку (что не всегда удобно)
self.opener.open - addinfourl (читайте документацию)
Офлайн
встретился с похожей проблемой.
При использовании 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)
Офлайн