Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 4, 2009 19:17:16

Skyler
От:
Зарегистрирован: 2009-07-23
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2.HTTPError: HTTP Error 302

Сайт http://kinopoisk.ru редиректит адрес сам на себя (т.е. редирект идет на kinopoisk.ru), из зачего крашится мой скрипт. Я не могу открыть страницу.
Вот что я пробывал:

br = mechanize.Browser()
br.set_handle_refresh(False)
br.set_debug_redirects(True)
br.open(url)
opener = urllib2.build_opener(urllib2.HTTPRedirectHandler())
urllib2.install_opener(opener)
site = opener.open(url)
Ничего не выходит. Google толкого решения не подсказал.
Можно ли эту проблему как-нибудь решить?
Вот ошибка:
Traceback (most recent call last):
File “./kinopoisk.py”, line 31, in <module>
kinopoisk.search('Jumper')
File “./kinopoisk.py”, line 21, in search
site = opener.open(url)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 587, in http_error_302
self.inf_msg + msg, headers, fp)
urllib2.HTTPError: HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
Found
P.S. По ходу не в тот раздел запостил :/



Отредактировано (Авг. 4, 2009 19:23:36)

Офлайн

#2 Сен. 2, 2009 16:25:08

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

urllib2.HTTPError: HTTP Error 302

А как его тогда браузер открывает, если он сам на себя редиректит ?



Офлайн

#3 Сен. 3, 2009 12:29:38

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

urllib2.HTTPError: HTTP Error 302

В соседней ветке обсуждали 302, там я линку приводит на код, который обрабатывает редирект.



Офлайн

#4 Сен. 27, 2009 13:30:21

Cristian
От:
Зарегистрирован: 2009-09-27
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2.HTTPError: HTTP Error 302

igor.kaist, тот код просто игнорирует редирект. А нужно, чтобы скрипт, наоборот, по нему переходил. Почему urllib2 этого не делает автоматически - не понятно.

Может, кто подскажет как это правильно реализовать?



Офлайн

#5 Сен. 27, 2009 14:24:00

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2.HTTPError: HTTP Error 302

Насколько я понял, сайт kinopoisk.ru редиректит на www.kinopoisk.ru, попробуй сразу с www. указывать. Проверял браузером, если с urllib он себя не так ведет, то можно попробовать сменить user agent.



Офлайн

#6 Сен. 27, 2009 14:34:49

Cristian
От:
Зарегистрирован: 2009-09-27
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2.HTTPError: HTTP Error 302

Пробовал. С www.kinopoisk.ru редиректит на error.kinopoisk.ru, там пытается установить куку сессии и редиректит обратно на www.kinopoisk.ru.

Фишка в том, что я в настройках Оперы отключал прием кук, отправку личных данных и автоматический редирект. И сайт, все-равно, открывался.

Даже в php, через curl, все работает без лишних телодвижений. А в python'e, urllib2 ни в какую не хочет обрабатывать редирект самостоятельно.



Офлайн

#7 Сен. 27, 2009 21:30:58

Cristian
От:
Зарегистрирован: 2009-09-27
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2.HTTPError: HTTP Error 302

Собственно, все оказалось банально просто. pasaranax, спасибо за подсказку.

Все что нужно, это передать в заголовках user agent. Хоть я и пробовал это раньше, но, видимо, где-то еще допустил ошибку (второй день с питоном работаю).

Если user agent не передавать, то сервер уходит в бесконечный редирект, о чем и сообщает urllib2 (зря грешил на эту библиотеку).

urllib2.HTTPError: HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.
Вот рабочий пример:
import urllib2

req = urllib2.Request('http://www.kinopoisk.ru');
req.add_header('User-Agent', 'Opera/9')
f = urllib2.urlopen(req)
print f.read()



Офлайн

#8 Фев. 27, 2010 18:19:14

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

urllib2.HTTPError: HTTP Error 302

Всем добрый день!
С чем может быть связано, что при замене

req.add_header('User-Agent', ‘Opera/9’)
на
req.add_header('User-Agent', ‘'Mozilla/5.0’')
опять появляется редирект?



Офлайн

#9 Фев. 27, 2010 18:50:34

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

urllib2.HTTPError: HTTP Error 302

Нужно, как не странно, писать

req.add_header('User-Agent', ''Firefox/3.5.8'').



Офлайн

#10 Март 23, 2010 13:45:50

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2.HTTPError: HTTP Error 302

Подскажите пожалуйста http://www.python.su/forum/viewtopic.php?pid=46033#p46033



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version