Constraint: Я не имею возможность использовать Python 3, поэтому requests
вне вопросаurllib2 ответ только: почему почтовый запрос не дает ответа 302?
мне нужно автоматизировать загрузки файла задачу.
В Firefox я могу увидеть запрос для файла на этот адрес www.example.com/files/MyFile_2014-02-14.csv
идет как это в консоли разработчика:
14:38:33.782 POST www.example.com [HTTP/1.1 302 Found 406ms]
14:38:34.288 GET www.example.com/files/MyFile_2014-02-14.csv/ [HTTP/1.1 200 OK 687ms]
Я использую следующий код для автоматизации процесса
import urllib
import urllib2
import cookielib
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
''' use it to prove if I get a 302 or not'''
def http_error_301(self, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(self, req, fp, code, msg, headers)
result.status = code
return result
def http_error_302(self, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers)
result.status = code
return result
def main():
proxy_handler = urllib2.ProxyHandler({'http': 'http://myproxy.local'})
username='XXX'
password='YYY'
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, 'http://www.example.com', username, password)
pass_handler = urllib2.HTTPBasicAuthHandler(passman)
cookieJar = cookielib.CookieJar()
cookieprocessor = urllib2.HTTPCookieProcessor(cookieJar)
srh = SmartRedirectHandler()
opener =urllib2.build_opener(proxy_handler, pass_handler, cookieprocessor, srh)
urllib2.install_opener(opener)
data = urllib.urlencode({'username':username, 'password':password}) # To force post
fileurl = 'http://www.example.com/files/MyFile_2014-02-14.csv'
req = urllib2.Request(fileurl, data, headers={'Proxy-Connection':'keep-alive'})
c = urllib2.urlopen(req)
c.code
всегда 200 и c.read()
только дает мне контент на их странице приветствия (доступно только после успешного входа в систему)
Почему я не получаю 302, как ожидалось?
На самом деле методы «SmartRedirectHandler» вообще не вызываются. В результате нет поля состояния –