python - 使用 Python 请求进行 ASP.NET 身份验证

标签 python asp.net authentication python-requests

我认为 ASP.NET 身份验证的方向是正确的。我正在尝试使用请求将凭据传递到网站。以下是我从 chrome 中提取的 header 和网络信息:

 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

这是我编写的脚本:

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."

我可以使用 Python 请求登录使用 ASP.NET 的网页吗?如果是这样,这是将凭据传递到网站的正确方法吗?作为引用,我尝试登录的网站是公司服务器监视器。

最佳答案

看起来类似的问题已发布 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)

关于python - 使用 Python 请求进行 ASP.NET 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24288915/

相关文章:

c# - 检查字符前后是否有空格进行字符串拆分

windows - 使用 VBA 从具有 SAML 身份验证的网站下载文件

php - Laravel-8 中 Auth::onceUsingID() 和 Auth::setUser() 有什么区别

asp.net - 运行 IdentityServer4 的问题

python - 有没有办法使用 Python 从目录中的所有文件加载数据?

python - 文本小部件中是否有用于加入撤消/重做堆栈的 Python Tkinter 方法?

Python scikits SVM 网格搜索和分类

asp.net - 为什么 ASP.NET 尝试为 Web 服务引用生成临时类?

ruby - Heroku,设计 : Getting 'NoMethodError (undefined method ` to_key' for :user:Symbol)'

python - 如何替换列表中除最后一项之外的所有项目