2014-06-18 3 views
2

저는 ASP.NET 인증을 제대로 수행하고 있다고 생각합니다. 요청을 사용하여 웹 사이트에 자격 증명을 전달하려고합니다.ASP.NET 인증을위한 Python 요청 사용

import requests 

FORM_DATA = { 
"__EVENTTARGET:":, 
"__EVENTARGUMENT:", 
"__VIEWSTATE:/wEPDwUKMTA5NTA5ODU1MQ9kFgJmD2QWAgIGDxBkDxYFZgIBAgICAwIEF***REMAINDER REMOVED***", 
"__EVENTVALIDATION:/wEdAAp4d3BHvSTs+Kv6cxGP3xEbBr8xrgRYad2tj4YCyRIw5qUAjimf****REMAINDER REMOVED****", 
"jsCheck:", 
"ddlEngine: REMOVED:13008", 
"Username: ****", 
"Password: ****", 
"btnLogin.x: 42", 
"btnLogin.y: 9", 
"btnLogin: Login", 
} 

HEADER = { 
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
"Accept-Encoding":"gzip,deflate,sdch", 
"Accept-Language":"en-US,en;q=0.8", 
"Cache-Control":"max-age=0", 
"Connection":"keep-alive", 
"Content-Type":"application/x-www-form-urlencoded", 
"Host":"REMOVED", 
"Origin":"REMOVED", 
"Referer":"REMOVED", 
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36" 
} 

LOGIN_URL = "REMOVED" 

#requests session to handle cookies. 
s = requests.Session() 
#Send a POST request with the form data/header info 
r = s.post(LOGIN_URL, data=FORM_DATA, headers=HEADER) 
if r.status_code == 302: 
    print "Successfully logged in." 
else: 
    print "Error logging in." 

는 ASP.NET을 사용하는 웹 페이지에 로그인 파이썬 요청을 사용하는 것이 내가 할 수 있습니까 : 여기

Remote Address: REMOVED 
Request URL: https://REMOVED/default.aspx 

Request Method: POST 
Status Code: 302 Found 

Request Headers: 

POST /default.aspx HTTP/1.1 
Host: REMOVED 
Connection: keep-alive 
Content-Length: 928 
Cache-Control: max-age=0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Origin: https://REMOVED 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36 
Content-Type: application/x-www-form-urlencoded 
Referer: https://REMOVED/default.aspx 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Cookie: ASP.NET_SessionId=REMOVED; BIGipServerpool_REMOVED_dmz_80=REMOVED.REMOVED.0000; AUTHCDB=**REMOVED** 

Form Data: 
__EVENTTARGET: 
__EVENTARGUMENT: 
__VIEWSTATE: /wEP**REMAINDER REMOVED** 
__EVENTVALIDATION: /wEd**REMAINDER REMOVED** 
jsCheck: 
ddlEngine:REMOVED:13008 
Username: 
Password: 
btnLogin.x: 42 
btnLogin.y: 9 
btnLogin: Login 

Response Headers: 

Cache-Control: private 
Content-Length: 132 
Content-Type: text/html; charset=utf-8 
Date: Fri, 13 Jun 2014 00:59:13 GMT 
Location: /Dashboard.aspx 
Server: Microsoft-IIS/7.5 
Set-Cookie: AUTHCDB=**REMOVED**; path=/; HttpOnly 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 

내가 쓴 스크립트가됩니다 : 여기 크롬에서 가져온 헤더 및 네트워크 정보는 ? 그렇다면 자격 증명을 웹 사이트에 전달하는 올바른 방법입니까? 참고로, 제가 로그인하려고 시도하는 웹 사이트는 회사 서버 모니터입니다.

+0

최종 솔루션을 게시 할 수 있습니까? 파이썬 요청을 통해 asp.net 웹 사이트에 로그인하려고 시도하고 있습니다. – Pawan

답변

-1

저는 현재 ASP.net 페이지 중 일부를 사용하고 있으며 요청 모듈에 대해 어느 정도 익숙해 져 있습니다. 조금 도와 주려고합니다.

from requests.auth import HTTPBasicAuth 
requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass')) 

그것은 당신이 직접 다른 인증 ASP.net와 함께 작동 도서관과 플러그를 가져올 필요가있을 경우 수 :

그것은 요청 나의 이해는이 방식으로 기본 인증을 지원합니다 요청의 인증 기능으로

희망이 도움이됩니다.

-1

비슷한 문제가 보이는 것처럼 보입니다. herehere입니다. 나는 RoboBrowser를 사용하고 있었고 ASPX를 너무 단순하게 만들었다.

from robobrowser import RoboBrowser 

login_url = 'http://example.com/Login.aspx' 
username = 'JohnDoe' 
password = 'passwd' 

browser = RoboBrowser(history=True) 
# This gets all the ASPX stuff, __VIEWSTATE and friends 
browser.open(login_url) 
signin = brower.get_form(id='aspnetForm') 
signin["jsCheck"].value = '' 
signin["ddlEngine"].value = "REMOVED:13008" 
signin["Username"].value = username 
signin["Password"].value = password 
signin["btnLogin.x"].value = "42" 
signin["btnLogin.y"].value = "9" 
signin["btnLogin"].value = "Login" 
browser.submit_form(signin) 
관련 문제