No se puede iniciar sesión en el sitio web de ASP.NET con el módulo de solicitudes de Python

Estoy intentando iniciar sesión en un sitio web de ASP.NET mediante el módulo de requests en Python .

Al iniciar sesión manualmente en el sitio web, puedo ver los siguientes encabezados, así como las cookies.

Encabezados de solicitud:

 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding:gzip,deflate Accept-Language:en-US,en;q=0.8 Cache-Control:max-age=0 Connection:keep-alive Content-Length:810 Content-Type:application/x-www-form-urlencoded Cookie:ASP.NET_SessionId=sfiziz55undlnz452gfc2d55; __utma=120481550.280814175.1411461613.1411461613.1411479534.2; __utmb=120481550.1.10.1411479534; __utmc=120481550; __utmz=120481550.1411461613.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) Host:www11.davidsonsinc.com Origin:http://www11.davidsonsinc.com Referer:http://www11.davidsonsinc.com/Login/Login.aspx?ReturnUrl=%2fdefault.aspx User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36 

Datos del formulario:

 __EVENTTARGET: __EVENTARGUMENT: __LASTFOCUS: __VIEWSTATE:/wEPDwUKMTY3MDM5MDAxNQ9kFgJmD2QWAgIDD2QWAgIDD2QWAgIBD2QWBAIBD2QWAmYPZBYCAg0PEA8WAh4HQ2hlY2tlZGdkZGRkAgMPDxYCHgdWaXNpYmxlaGRkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBUBjdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXZQYW5lJExlZnRTZWN0aW9uJFVzZXJMb2dpbiRSZW1lbWJlck1lsSFPYUYvIbQNBPs/54aHYcx6GyU= __VIEWSTATEGENERATOR:1806D926 __EVENTVALIDATION:/wEWBQLy8oGOCwKanaixDwKPr7TsAQKu3uTtBgKs+sa/CQVDEisOu4Iw1m9stXWgAAz9TWQn ctl00$ContentPlaceHolderNavPane$LeftSection$UserLogin$UserName:Username ctl00$ContentPlaceHolderNavPane$LeftSection$UserLogin$Password:password ctl00$ContentPlaceHolderNavPane$LeftSection$UserLogin$RememberMe:on ctl00$ContentPlaceHolderNavPane$LeftSection$UserLogin$LoginButton:Log In 

Solicitar cookies

 ASP.NET_SessionId: nz452gfc2d55 

Cookies de respuesta

 .ASPXAUTH: 1F5A05237A1AA18795ECA108CE6E70D48FE5CBB5B38D061E0770618F6C069ABA03604335B6209CF8198AD3E98AE934F14056F5C887A92BB099BF38D639A22BC12972DEEE91BCE0BF36239BD1728E228E0E9CA1E5146A6C69E906E177CC8FB27395CE2F56B4013535C62E821384231EF0AD632474D6EBCFCD859882DBE9D420B6A8816BE6 

A continuación, se encuentra el script que utilizo para iniciar sesión en los sitios web que utilizan Python / Django .

 import requests with requests.Session() as c: url = 'http://www.noobmovies.com/accounts/login/?next=/' USERNAME = 'user name' PASSWORD = 'password' c.get(url) csrftoken = c.cookies['csrftoken'] login_data = dict(csrfmiddlewaretoken=csrftoken, username=USERNAME, password=PASSWORD, next='/') c.post(url, data=login_data, headers={"Referer":"http://www.noobmoviews.com/"}) page = c.get('http://www.noobmovies.com/user/profile/0/') print page.status_code 

Pero no sé cómo iniciar sesión en un sitio web ASP.NET. ¿Cómo publico los datos en el sitio web ASP.NET?

 import requests from bs4 import BeautifulSoup URL="http://www11.davidsonsinc.com/Login/Login.aspx" headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36"} username="username" password="password" s=requests.Session() s.headers.update(headers) r=s.get(URL) soup=BeautifulSoup(r.content) VIEWSTATE=soup.find(id="__VIEWSTATE")['value'] VIEWSTATEGENERATOR=soup.find(id="__VIEWSTATEGENERATOR")['value'] EVENTVALIDATION=soup.find(id="__EVENTVALIDATION")['value'] login_data={"__VIEWSTATE":VIEWSTATE, "__VIEWSTATEGENERATOR":VIEWSTATEGENERATOR, "__EVENTVALIDATION":EVENTVALIDATION, "ctl00$ContentPlaceHolderNavPane$LeftSection$UserLogin$UserName":username, "ctl00$ContentPlaceHolderNavPane$LeftSection$UserLogin$Password":password, "ctl00$ContentPlaceHolderNavPane$LeftSection$UserLogin$LoginButton":"Log In"} r=s.post(URL, data=login_data) print r.url 

Inicialmente estaba utilizando peticiones + bs4 y, sin embargo, tenía problemas similares con el sitio ASPX que estoy eliminando. Encontré otra biblioteca llamada robobrowser que envuelve las solicitudes + bs4. Con esto, ya no tendrá que configurar manualmente elementos como “__VIEWSTATE” y amigos cuando interactúen con sitios ASPX.

 from robobrowser import RoboBrowser url = ' http://www11.davidsonsinc.com' login_url = url + '/Login/Login.aspx' username = "username" password = "password" browser = RoboBrowser(history=True) # This retrieves __VIEWSTATE and friends browser.open(login_url) signin = browser.get_form(id='aspnetForm') signin["ctl00$ContentPlaceHolderNavPane$LeftSection$UserLogin$UserName"].value = username signin["ctl00$ContentPlaceHolderNavPane$LeftSection$UserLogin$Password"].value = password signin["ctl00$ContentPlaceHolderNavPane$LeftSection$UserLogin$LoginButton"].value = "Log In" browser.submit_form(signin) print browser.url