gpt4 book ai didi

ios - 如何使用 POST 请求登录网站? ( swift ,iOS)

转载 作者:搜寻专家 更新时间:2023-10-31 19:36:52 25 4
gpt4 key购买 nike

我想创建一个登录 website 的 iOS 应用程序并从该站点的多个页面解析数据,同时维护登录 session 。这就是我到目前为止所做的。我发送 GET 请求以检索 POST 请求所需的 EVENTVALIDATON 和 VIEWSTATE 参数。 (我使用“Firebug”查看了 POST)。当我运行以下代码时,它会返回相同的登录页面。但它应该给我 this page .

    var parameter: Parameters = [:]
var viewstate: String = ""
var eventvalidation: String =


@IBAction func postRequest(_ sender: Any) {


Alamofire.request("https://ecampus.psgtech.ac.in/studzone/AttWfLoginPage.aspx").responseString { response in
print("\(response.result.isSuccess)")
if let html = response.result.value {
if let doc = Kanna.HTML(html: html, encoding: String.Encoding.utf8) {
// Search for nodes by CSS selector

for show in doc.css("input[id='__VIEWSTATE']") {
self.viewstate=show["value"]!
//print(show["value"] as Any)
}

for show in doc.css("input[id='__EVENTVALIDATION']") {
self.eventvalidation=show["value"]!
//print(show["value"] as Any)
}
}
}
//creating dictionary for parameters
self.parameter = ["__EVENTTARGET":"",
"__EVENTARGUMENT":"",
"__LASTFOCUS":"",
"__VIEWSTATE":self.viewstate,
"__EVENTVALIDATION":self.eventvalidation,
"rdolst":"S",
"Txtstudid":"<myrollno>",
"TxtPasswd":"<mypassword>",
"btnlogin":"Login"
]
}
Alamofire.request ("https://ecampus.psgtech.ac.in/studzone/AttWfLoginPage.aspx",method: .post, parameters: self.parameter, headers: headers).responseString { response in
print("\(response.result.isSuccess)")
print(response)
}

老实说,我对请求和解析数据很陌生(虽然我已经单独完成了解析部分)。我做了更多研究并阅读了有关 header 和 cookie 的信息。因此在检查 header 后,浏览器的初始 GET 请求的响应 header 为

Cache-Control :   private
Content-Encoding : gzip
Content-Length : 4992
Content-Type : text/html; charset=utf-8
Date : Sun, 18 Jun 2017 14:25:50 GMT
Server : Microsoft-IIS/8.0
Set-Cookie : .ASPXAUTH=; expires=Mon, 11-Oct-1999 18:30:00 GMT; path=/; HttpOnly
Vary : Accept-Encoding
X-AspNet-Version : 4.0.30319
X-Powered-By : ASP.NET

的请求头
Accept :    text/html,application/xhtml+xml,application/xml;q=0.9;q=0.8
Accept-Encoding : gzip, deflate, br
Accept-Language : en-US,en;q=0.5
Connection : keep-alive
Cookie : ASP.NET_SessionId=urzugt0zliwkmz3ab1fxx1ja
Host : ecampus.psgtech.ac.in
Upgrade-Insecure-Requests : 1
User-Agent : Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:54.0) Gecko/20100101 Firefox/54.0`

问题是我不明白最初的 GET 请求怎么会有一个 token 。如果请求先发生,响应应该是包含 token 的响应?我不知道我做错了什么以及如何让它工作。我不知道我是否完全遗漏了一些东西。我是在尝试了我能想到的一切之后才来到这里的。任何帮助,将不胜感激。谢谢。

最佳答案

POST 所需的 EVENTVALIDATON 和 VIEWSTATE 参数 <--

但是在你的代码中POST请求是在GET请求之后立即执行的,此时self.parameter为空

Alamofire 具有异步 completionHandler

等待GET请求完成,然后发送POST请求:

var parameter: Parameters = [:]
var viewstate: String = ""
var eventvalidation: String =


@IBAction func postRequest(_ sender: Any) {


Alamofire.request("https://ecampus.psgtech.ac.in/studzone/AttWfLoginPage.aspx").responseString { response in
print("\(response.result.isSuccess)")
if let html = response.result.value {
if let doc = Kanna.HTML(html: html, encoding: String.Encoding.utf8) {
// Search for nodes by CSS selector

for show in doc.css("input[id='__VIEWSTATE']") {
self.viewstate=show["value"]!
//print(show["value"] as Any)
}

for show in doc.css("input[id='__EVENTVALIDATION']") {
self.eventvalidation=show["value"]!
//print(show["value"] as Any)
}
}
}
//creating dictionary for parameters
self.parameter = ["__EVENTTARGET":"",
"__EVENTARGUMENT":"",
"__LASTFOCUS":"",
"__VIEWSTATE":self.viewstate,
"__EVENTVALIDATION":self.eventvalidation,
"rdolst":"S",
"Txtstudid":"15i231",
"TxtPasswd":"OpenSesame",
"btnlogin":"Login"
]

//Wait for the GET request to complete, and then send the POST request: <<==
Alamofire.request ("https://ecampus.psgtech.ac.in/studzone/AttWfLoginPage.aspx",method: .post, parameters: self.parameter, headers: headers).responseString { response in
print("\(response.result.isSuccess)")
print(response)
}

}

关于ios - 如何使用 POST 请求登录网站? ( swift ,iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44616118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com