Swift HTTP POST请求登录

时间:2015-08-01 12:37:33

标签: html ios swift post

嘿,我试图找出这个问题很长一段时间,所以现在我要求你们帮忙。 在我的项目中,我尝试向具有登录表单的网站发送POST请求以访问服务器。但我不知道如何设法传递数据。 我尝试访问的网站是https://edu.sh.ch

在浏览器的Inspector中我可以看到它需要一个Post方法来传递数据:

<form id="form1" name="form1" autocomplete="off" method="post" action="/uniquesigfe5a0f1f915f15b647d0b7a5306be984/uniquesig0/InternalSite/Validate.asp" onsubmit="return(SubmitForm());"></form>

这是我的代码:

func PostingCredentials(){

        let myUrl = NSURL(string: self.manipulatedUrl)
        let request = NSMutableURLRequest(URL:myUrl!);
        request.HTTPMethod = "POST";

        // Compose a query string
        let form1 = "user_name=MyUsername&password=MyPassword"

        request.HTTPBody = form1.dataUsingEncoding(NSUTF8StringEncoding)

        let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
            data, response, error in

            if error != nil
            {
                println("error=\(error)")
                return
            }
            println("response = \(response)")
            // You can print out response object
            let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
            //
            println("responseString = \(responseString)")

        }

        task.resume()

    }

请注意, self.manipulateUrl 等于我正常登录并提交凭据(https://edu.sh.ch/uniquesigfe5a0f1f915f15b647d0b7a5306be984/uniquesig0/InternalSite/Validate.asp)时显示的网址

Post Function发布了一些内容,但响应始终是某种错误页面(我在代码中没有收到任何错误,但是服务器的响应是错误的)

所以最后我的主要问题是:

  • 我的代码是什么问题
  • 我必须将POST方法发送到登录页面网址还是验证网址?

提前致谢

1 个答案:

答案 0 :(得分:2)

您的网页存在问题。网络编码出了点问题。然后你也可以尝试下面的代码:

let form1 = "user_name=MyUsername&password=MyPassword"
let request:NSMutableURLRequest = NSMutableURLRequest(URL: NSURL(string: "https://edu.sh.ch")!)
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.HTTPMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-type")
request.HTTPBody = form1.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response:NSURLResponse!, data:NSData!, error:NSError!) -> Void in

    var str = NSString(data: data, encoding: NSUTF8StringEncoding)
    //var dict = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSArray
}