Как выполнить перенаправление HTTP 303 с urllib2 в python? - PullRequest
0 голосов
/ 23 августа 2011

У меня есть URL для выборки, который дает перенаправление HTTP 303:

import urllib2 as web
import sys

url='http://sample.com'

try: handle=web.urlopen(url)
except web.HTTPError, e:
  print e.code
  sys.exit(1)
data=handle.read()
print 'Result :'
print data

Таким образом, приведенный выше код печатает 303, в результате перенаправление 303.

Я хочу, чтобы он следовал за редиректом и доставал мне HTML-код назначения.

Пожалуйста, помогите ..

Редактировать:

curl -I http://my303redirecturl.com/

HTTP/1.1 303 See Other
Date: Tue, 23 Aug 2011 04:53:53 IST
Server: Mule Core/3.1.2
Expires: Tue, 23 Aug 2011 04:53:53 IST
http.status: 303
Content-Type: application/json
MULE_ENCODING: UTF-8
Content-Length: 0
Connection: close

Поможет ли это?

Ответы [ 2 ]

3 голосов
/ 23 августа 2011

urllib2 должен следовать 303 перенаправлениям по умолчанию. Используйте следующий пример для проверки:

import urllib2
url = 'http://phihag.de/2011/so/303/'
print(urllib2.urlopen(url).read())

Если приведенный выше код распечатывает содержимое файла example.net, а ваш URL - нет, то рассматриваемый URL не разрешается с правильным перенаправлением 303. Если это так, вы можете использовать urllib2.build_opener, чтобы получить открывашку, которая использует вашу собственную реализацию BaseHandler вместо значения по умолчанию HTTPRedirectHandler .

0 голосов
/ 23 августа 2011

Эта страница содержит довольно хорошее резюме о том, как обрабатывать HTTP-перенаправления с помощью urllib.

HTH

РЕДАКТИРОВАТЬ: В статье показано, как получить URL перенаправления, который затем может быть запрошен с другим urlopen.

...