Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用Python+;登录到站点时处理302重定向;urllib_Python_Asp.net_Urllib - Fatal编程技术网

在使用Python+;登录到站点时处理302重定向;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)

我正在使用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) 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没有任何问题。