【问题标题】:Can't Make Post Request with Swift无法使用 Swift 进行发布请求
【发布时间】:2015-05-07 07:48:54
【问题描述】:

我尝试使用 swift 发出发布请求,但它总是显示错误。我只是复制了我的 chrome 所做的发布请求(通过开发人员工具)。

func postRequest(){

    let request = NSMutableURLRequest(URL: NSURL(string: "http://blich.iscool.co.il/tabid/2117/language/he-IL/Default.aspx/")!)
    request.HTTPMethod = "POST"
    let postString = "__VIEWSTATE=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&nn$ctr7919$TimeTableView$ClassesList=1&dnn$ctr7919$TimeTableView$MainControl$WeekShift=0&dnn$ctr7919$TimeTableView$ControlId=8"
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)

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

        if error != nil {
            println("error=\(error)")
            return
        }

        println("response = \(response)")

        let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
        println("responseString = \(responseString)")
    }
    task.resume()



        }

结果是:

response = <NSHTTPURLResponse: 0x7ffc90f054a0> { URL: http://blich.iscool.co.il/Default.aspx?tabid=2117&error=The+state+information+is+invalid+for+this+page+and+might+be+corrupted.&content=0 } { status code: 200, headers {
"Cache-Control" = private;
"Content-Encoding" = gzip;
"Content-Length" = 2875;
"Content-Type" = "text/html; charset=utf-8";
Date = "Thu, 07 May 2015 07:41:32 GMT";
Server = "Microsoft-IIS/7.5";
"Set-Cookie" = "DotNetNukeAnonymous=aaab9a64-e579-43f8-a83e-d4ed7c221f02; expires=Thu, 07-May-2015 08:01:32 GMT; path=/; HttpOnly, language=he-IL; path=/; HttpOnly";
Vary = "Accept-Encoding";
"X-AspNet-Version" = "2.0.50727";
"X-Powered-By" = "ASP.NET";

当我只是阅读文件而不发出发布请求时,它显示了正确的内容,但是当我发出发布请求时它错误。

我该如何解决?我希望该网站向我显示我在应用程序中选择的正确表格上的数据。 http://blich.iscool.co.il/tabid/2117/language/he-IL/Default.aspx/

这是当前代码:错误已得到修复 - 但仍然什么都不做

func postRequest(){
    SRWebClient.POST("http://blich.iscool.co.il/tabid/2117/language/he-IL/Default.aspx/").data(["__EVENTTARGET":"dnn$ctr7919$TimeTableView$btnChangesTable","__EVENTARGUMENT":"","__LASTFOCUS":"","__VIEWSTATE":"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","__VIEWSTATEGENERATOR":"CA0B0334","dnn$ctr7919$TimeTableView$ClassesList":"1","dnn$ctr7919$TimeTableView$ControlId":"","ScrollTop":"","__dnnVariable":""]).send({(response:AnyObject!, status:Int) -> Void in
            //this is success part
            println(response)
            }, failure:{(error:NSError!) -> Void in
                //this is failure part
                println(error)
        })
}

【问题讨论】:

  • 为什么不使用 Alamofire 和 SwiftyJSON?

标签: swift post parameters http-post httprequest


【解决方案1】:

尝试使用此SRWebClient。您只需将this swift file 添加到您的项目并保存为SRWebClient.swift

然后,当您发布时,您可以使用此代码。

 SRWebClient.POST("http://blich.iscool.co.il/tabid/2117/language/he-IL/Default.aspx/")
                .data(["yourFieldName":"yourValueForTheField"])
                .send({(response:AnyObject!, status:Int) -> Void in
                       //this is success part
                        println(response)
                    }, failure:{(error:NSError!) -> Void in
                       //this is failure part 
                        println(error)
                    })

这是最简单最简单的方法。试试看,如果有任何问题,请告诉我。谢谢。

【讨论】:

  • 它在 SRWebClient.Post 下对我说:“使用未解析的标识符 'SRWebClient'”,知道吗?谢谢
  • 您是否已将 [this] (github.com/sraj/Swift-SRWebClient/blob/master/SRWebClient/…) 添加到您的项目中?并将其命名为 SRWebClient.swift ?
  • 好的,现在可以找到了,没有错误但没有任何变化,例如,当我单击顶部最右边的按钮时(״מערכת שינויים״)chrome 告诉我请求,所以我将它们复制到我的应用程序,运行 - 但没有任何改变。我将编辑您将看到我的代码的帖子(很抱歉该网站都是希伯来语:))
  • 嗨,Shaik,你明白我的问题吗?谢谢
【解决方案2】:

我建议你使用库“Alamofire”来处理 HTTP 请求。这是链接:https://github.com/Alamofire/Alamofire

这让一切变得如此简单:

    request(.POST, url, parameters: parameters).responseJSON()
    {
         (request, response, data, error) in
         if (data != nil)
         {
           // Do what you want
         }
    }

然后,随意使用 SwiftyJSON 解析 JSON:https://github.com/SwiftyJSON/SwiftyJSON,或任何您想做的事情。

编辑:对于参数,您需要像这样创建一个字典:

    let parameter = [
       "key1": "value1",
       "key2": "value2"
    ]

但一切都在文档的“使用”部分进行了解释

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多