我正在向服务器发送请求,该服务器正在处理请求和响应。但是在我的应用程序上,我收到了:
Error Domain=NSURLErrorDomain Code=-1017 "cannot parse response" UserInfo=0x167668d0
{NSErrorFailingURLStringKey=https://***, _kCFStreamErrorCodeKey=-1,
NSErrorFailingURLKey=https://***/, NSLocalizedDescription=cannot
parse response, _kCFStreamErrorDomainKey=4, NSUnderlyingError=0x16731990 "cannot parse
response"
http请求中的接受字段就足够了。
我甚至无法看到messege到达了什么,因为NSHTTPURLResponse对象为空。
什么可能是一个问题,以什么方式我可以看到什么消息不会使用wireshark之类的东西。
谢谢!
答案 0 :(得分:8)
我遇到了同样的问题,原因是API需要 GET http方法,我需要传递参数,我通过以下代码发送:
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
当我使用 GET 方法执行请求时,它会报告错误。
我的解决方案是当API需要 GET 方法时,当API方法为 POST 时,该参数应添加到网址上,例如http://apiserver/api?paramName=paramValue
,然后使用上面的代码,为请求对象设置HTTPBody。
答案 1 :(得分:4)
如果iOS无法解析响应,则问题必须是来自服务器的不正确格式的http响应,即使您被说,一切都是100%正确,因为其他服务与之通信。
在我的情况下,Android应用程序成功通信,因为那里使用的网络框架没有那么严格,即使http响应的内容长度不符合实际的数据长度,它也可以读取此消息,与ios不同。 / p>
使用tcpdump检查http通讯!
答案 2 :(得分:4)
当我尝试使用http GET方法而不是http POST调用Web方法时,我遇到了同样的问题。 Web服务方法期望POST请求不是GET。希望这些信息对一些人有所帮助。
答案 3 :(得分:2)
如果您正在使用(iOS8有问题但在iOS7中有效)
NSData *dataToSend = [jsonData dataUsingEncoding:NSUTF16BigEndianStringEncoding]
要发送到服务器,请按以下方式进行:
NSData *dataToSend = [jsonData dataUsingEncoding:NSUTF8StringEncoding]
答案 4 :(得分:1)
我看到了这个错误,因为我正在使用的框架试图在JSON编码正文中的GET请求中发送URL参数(而不是URL字符串中的URL编码参数)。这导致服务器发回"无效参数消息"客户无法处理,而是在请求中止。从身体参数切换到GET请求的URL编码参数解决了这个问题。
答案 5 :(得分:0)
首先,我会确保您在正文和标题中发送正确的参数。我收到了这个错误,在将其中一个参数从主体移动到标题后,我收到了正确的响应。
如果有api的任何文档,请确保您正确地遵循它。