iOS POST不适用于HTTPS

时间:2014-05-09 20:43:33

标签: ios post https nsurlconnection

我有一些适用于HTTP的代码,但在HTTPS上从NSJSONObjectserialization-thing返回的值为null时失败。

我尝试将收到的数据转换为字符串,然后将其记录为有效的JSON。我也证实了这一点。都好。 HTTPS证书有效,但我确实尝试实现无效证书的回调,没有变化。

EXACT相同的配置在HTTP上完美运行,如果我去浏览器并输入相同的POST(我甚至尝试删除POST,只是让服务器返回JSON,无论你输入什么)我也得到有效的JSON。

我尝试将接收的数据转换为数组并抓取数组中的第一个对象 - 也没有工作。我尝试在不同的配置(application / json)等中更改http标头。没有骰子。

错误代码是Cocoa 3840.据我所知,此错误意味着无效的JSON。这怎么可能?它说角色3不好?

有什么建议吗?我用Google搜索了最好的东西,但我能找到的只是" https和http应该以相同的方式工作"或多或少。

证书由RapidSSL验证。

NSDictionary* json = [NSJSONSerialization JSONObjectWithData:_responseDataNews options:kNilOptions error:&error];

_responseDataNews是由didReceiveData委托填充的对象 - 这个确切的配置适用于HTTP。 #€%*#我在这里做错了什么?它让我疯了。

确切错误是:

  

错误域= NSCocoaErrorDomain代码= 3840"无法完成操作。 (可可误差3840。)" (JSON文本不以数组或对象和选项开头,以允许未设置片段。)UserInfo = 0xbb2cde0 {NSDebugDescription = JSON文本不以数组或对象开头,并且选项允许未设置片段。}

如果启用片段选项:

  

错误域= NSCocoaErrorDomain代码= 3840"无法完成操作。 (可可误差3840。)" (字符3周围的值无效。)UserInfo = 0xb939ab0 {NSDebugDescription =字符3周围的值无效。}

JSON看起来像:{"r":1,"n":"Text here"} 不,"文字"不包含任何时髦的角色。这是我测试的实际JSON值。

编辑:数据对象的NSLog显示:

efbbbfef bbbfefbb bfefbbbf efbbbf7b 22687322 3a5b7b22 75736572 223a2254
65737465 73656e22 2c227363 6f726522 3a223233 3032227d 5d7d

(使用JSON:{"hs":[{"user":"Testesen","score":"2302"}]}

编辑:...好了,事实证明,现在它也无法在HTTP上工作,所以它必须在更改SSL设置或服务器上的某个东西之后才会破坏!? HTTP返回完全相同(无效)的数据对象:(

2 个答案:

答案 0 :(得分:1)

您报告的字符串NSData为:

<efbbbfef bbbfefbb bfefbbbf efbbbf7b 22687322 3a5b7b22 75736572 223a2254
 65737465 73656e22 2c227363 6f726522 3a223233 3032227d 5d7d>

ef bb bf是UTF-8字符串的byte order mark。但是如果你有一个BOM,你应该只有一个,你有五个。

如果您以编程方式创建此响应,则可能会多次调用一些重复添加此BOM的服务器功能。 BOM应该只出现一次(如果有的话),并且它多次出现表明服务器代码存在问题。

如果您手动创建此文件,则可能需要编辑十六进制数据。使用您想要解决的任何十六进制编辑器。例如,如果要使用Xcode编辑此文件,可以将其添加到Xcode项目中,然后右键单击该文件并选择“打开为...” - “十六进制”。

答案 1 :(得分:0)

好的 - 事实证明这与HTTPS无关。

由于某种原因我无法理解,我的php脚本在重构后只使用1个.php文件来响应POST,包含所有其他.php文件并根据你发布的内容返回相应的函数,前缀为无效字符 - 当然我试着让它调用其中一个函数而不用POST任何东西,这样我就可以排除故障排除中的POST错误。

我改变之后所以我根据我想在服务器上做什么来请求特定文件 - 获取新闻,获取用户,获得分数,等等,而不仅仅是server.com +而不仅仅是server.com + POST数据得分,它没有问题,JSON响应有效。

我真的不知道.php是如何搞砸的,但是有些事情出了问题。我尝试在Notepad ++中启用“显示所有字符”,但我在任何地方都看不到任何有趣的东西。我确保所有.php文件都以UTF-8编码。