0

我现在正在开发一个小应用程序,我需要在其中连接到一些网站以获取一些信息。

这是我制作的函数,它在 90% 的时间里都能满足我的需求。

func requestFunctionOn(url: String) {
    print(#function + " url: \(url)")
    let request = NSMutableURLRequest(URL: NSURL(string: url)!)
    request.HTTPMethod = "POST"

    NSURLSession.sharedSession().dataTaskWithRequest(request,
                                                     completionHandler: {
                                                        data, response, error in

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

                                                        print("RSC = \((response as! NSHTTPURLResponse).statusCode)")
                                                        ............. doing some more useful work .............
                                                     }).resume()
}

虽然有时我遇到了问题,但我不知道为什么。例如,下面是工作用例 (RSC = 200) 和非工作用例 (RSC = 404) 的调试器控制台中的跟踪:

按预期工作:

requestFunctionOn url: http://abcnews.go.com
RSC = 200
(lldb) 

没有按预期工作:

requestFunctionOn url: http://www.bloomberg.com/asia
RSC = 404
(lldb) 

我该怎么做才能使第二个案例起作用?我需要看哪里?

4

1 回答 1

0

两个问题:

  • 您需要设置 Content-Type 标头以指示 POST 请求正文的内容,Swift 相当于:

    [request addValue:@"text/plain" forHTTPHeaderField:@"Content-Type"];
    
  • 您需要设置请求正文:

    request.HTTPBody = [NSData data];
    

为 Objective-C 片段道歉,但我认为这应该足够接近,以便您能够找出等效的 Swift 代码。:-)

于 2016-09-06T20:10:44.080 回答