XCode swift HTTPS:String(数据:数据!,编码:NSUTF8StringEncoding)返回nil

时间:2016-11-01 14:52:03

标签: ios swift xcode https character-encoding

我正在从HTTPS页面检索HTML内容,但对于“短”内容,我确实得到了它。对于“长”的内容,我得到一个零答案。

我不知道内容长度是否与它有关。

我的页面要么以HTML格式返回一个报告(一个包含几行的小表格),要么在找不到报告时返回“错误”消息。

当返回错误消息时,它“运行良好” - >我得到了HTML回复,但是当它找到报告时,我得到了一个零答案。

该报告在HTML浏览器中运行良好。我检查了apache日志,答案内容的长度正确,但是Xcode得到了一个零答案。

我已经检查过在互联网上发现的“HTTPS无需求”问题。 HTTPS不是问题。代码正在运行,无需将“允许任意加载”设置为true或添加“异常域”。启用这些选项无法解决问题。

我不知道在服务器发送时可能导致此nil请求的原因。

let curUsuario=curTuc.nombre
let urlString = "https://xxxxxx.yyyyy.com/PatientLabDetails5?usuario=\(curUsuario)&pin=\(curnoPin)"
let url = NSURL(string: urlString)
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {
                        (data, response, error) in

 print("response: \(response)")
 print("Data: \(data?.length)")

....
};
task.resume()

调试:

response: Optional(<NSHTTPURLResponse: 0x7aea3f30> { URL: https://xxxx.yyyy.com/PatientLabDetails5?usuario=25808&pin=4884938 } { status code: 200, headers {
    Connection = "Keep-Alive";
    "Content-Type" = "text/html;charset=ISO-8859-1";
    Date = "Tue, 01 Nov 2016 14:07:29 GMT";
    "Keep-Alive" = "timeout=15, max=100";
    Server = Apache;
    "Set-Cookie" = "JSESSIONID=2A38EC49C93927A34AA1C9ED16B5F997; Path=/; Secure; HttpOnly";
    "Transfer-Encoding" = Identity;
    "X-Content-Type-Options" = nosniff;
    "X-Frame-Options" = SAMEORIGIN;
    "X-XSS-Protection" = "1; mode=block";
} })

Data: 6015

但是当我尝试获取数据时,我得到了一个零结果..

print(String(data: data!, encoding: NSUTF8StringEncoding ))

我在3台服务器上测试了它,显然具有相同的apache设置和完全相同的Web服务器代码。一方面它运作良好,另一方面没有。像往常一样,工作的是我不需要使用的那个。

我检查了www.htbridge.com/ssl上的SSL证书安装(以防万一)并获得了A +等级。

2 个答案:

答案 0 :(得分:1)

在我的代码中通常会退回:

 var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
 if (strData == nil){
    //roll back to ASCII ...
        strData = NSString(data: data, encoding: NSASCIIStringEncoding)
    }

答案 1 :(得分:0)

我终于明白了!

感谢AlejandroAvilàn就String(data: data, encoding: NSUTF8StringEncoding) return nil问题提出的意见,我将NSUTF8StringEncoding替换为NSASCIIStringEncoding,我的问题现已解决。