2014-09-23 9 views
7

Sto tentando di accedere a un sito Web in Python.Impossibile accedere al sito Web di ASP.NET con il modulo richieste di Python

Durante l'accesso manuale nel sito Web, è possibile visualizzare le seguenti intestazioni e cookie.

intestazioni di richiesta:

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 

Modulo di dati:

__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 

Richiesta Cookies

ASP.NET_SessionId: nz452gfc2d55 

cookie di risposta

.ASPXAUTH: 1F5A05237A1AA18795ECA108CE6E70D48FE5CBB5B38D061E0770618F6C069ABA03604335B6209CF8198AD3E98AE934F14056F5C887A92BB099BF38D639A22BC12972DEEE91BCE0BF36239BD1728E228E0E9CA1E5146A6C69E906E177CC8FB27395CE2F56B4013535C62E821384231EF0AD632474D6EBCFCD859882DBE9D420B6A8816BE6 

seguito è lo script che uso per il login a siti web utilizzando 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 

Ma io non so come accedere in un sito web ASP.NET. Come posso pubblicare i dati sul sito Web ASP.NET?

risposta

14
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 
+0

Grazie Mohsin, questo è quello che stavo cercando, è perfettamente funzionante. Grazie mille !!! –

+0

:-) Sono felice di poterti aiutare –

3

Inizialmente stavo usando anche le richieste + bs4, ma stavo riscontrando problemi simili con il sito ASPX che sto demolendo. Ho trovato un'altra libreria chiamata robobrowser che racchiude le richieste + bs4. Con questo non è più necessario impostare manualmente elementi come "__VIEWSTATE" e amici quando si interagisce con i siti 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 
Problemi correlati