在使用Python+;登录到站点时处理302重定向;urllib
我正在使用Python 3.2和urllib,并尝试使用以下代码登录到站点:在使用Python+;登录到站点时处理302重定向;urllib,python,asp.net,urllib,Python,Asp.net,Urllib,我正在使用Python 3.2和urllib,并尝试使用以下代码登录到站点: import urllib from urllib.request import ProxyHandler, build_opener, install_opener import http.cookiejar from bs4 import BeautifulSoup headers = {'User-Agent': ' Mozilla/5.0 (Windows NT 6.2; WOW64; rv:30.0)
import urllib
from urllib.request import ProxyHandler, build_opener, install_opener
import http.cookiejar
from bs4 import BeautifulSoup
headers = {'User-Agent': ' Mozilla/5.0 (Windows NT 6.2; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0'}
#proxy
proxy_login = 'my_login'
proxy_password = 'my_proxy'
proxy_address = 'proxy_address'
proxy = ProxyHandler({'http': 'http://%s:%s@%s' %(proxy_login, proxy_password, proxy_address)})
login = 'login'
password = 'password'
app_link = 'http://app_link'
cookie = http.cookiejar.CookieJar()
opener = build_opener(proxy, urllib.request.HTTPCookieProcessor(cookie))
install_opener(opener)
正如我在FireBug中看到的,首先我应该获得Login.aspx页面来设置_EVENTVALIDATION和_VIEWSTATE。这不是问题:
def get_login_data(log_page):
parsed_login_page = BeautifulSoup(log_page)
view_state = parsed_login_page.find('input', id="__VIEWSTATE").attrs['value']
event_validation = parsed_login_page.find('input', id="__EVENTVALIDATION").attrs['value']
return {'__EVENTTARGET': 'btnContinue', '__EVENTVALIDATION': event_validation,
'__VIEWSTATE': view_state, 'txtLogin': login, 'txtPassword': password}
#getting nessesary data from the login page
req = urllib.request.Request("%s/Login.aspx" %app_link, headers = headers)
page = urllib.request.urlopen(req).read().decode('cp1251')
data = get_login_data(page)
sendData = urllib.parse.urlencode(data).encode()
我在浏览器中看到,登录时Login.aspx页面上有302个重定向
POST Login.aspx 302 Found
GET OrderOptions.aspx 200 OK
当我取消重启时,浏览器发出POST Login.aspx请求,接收.ASPXAUTH cookie,然后获取下一页OrderOptions.aspx。
我该怎么做呢?我试过这个:
req2 = urllib.request.Request("%s/Login.aspx" %app_link, sendData, headers)
resp2 = urllib.request.urlopen(req2)
page2 = resp2.read().decode('cp1251')
但它不起作用:看起来我的req2 POST请求变成了GET,只是再次加载Login.aspx,我没有收到任何cookie
>>> req2.get_method()
'POST'
>>> resp2._method
'GET'
谢谢。显然您付出了很大的努力,但是您看过请求库了吗?它能更好地处理所有这些,例如代理、身份验证、重定向、会话、cookies。@mhawke,我听说过,如果没有决定,我会使用它。在使用ASP.NET之前,我对urllib没有任何问题。