Swift2 如何使用NSURL会话对需要特殊字符的服务器进行api调用?
我正在用Swift2.0和XCode 7.2构建一个iOS应用程序 我正在尝试对以下对象进行api调用:Swift2 如何使用NSURL会话对需要特殊字符的服务器进行api调用?,swift2,Swift2,我正在用Swift2.0和XCode 7.2构建一个iOS应用程序 我正在尝试对以下对象进行api调用: htttp://xyz.com/t/restaurants-us?KEY=someKey&filters={“地区”:{“$eq”:“迈阿密”} 当我尝试使用此字符串(端点)创建URL时: let url=NSURL(字符串:端点),则返回一个nil 因此,我尝试在创建URL之前对字符串进行编码: let encodedString = endPoint.stringByAddingPerc
htttp://xyz.com/t/restaurants-us?KEY=someKey&filters={“地区”:{“$eq”:“迈阿密”}
当我尝试使用此字符串(端点)创建URL时:
let url=NSURL(字符串:端点)
,则返回一个nil
因此,我尝试在创建URL之前对字符串进行编码:
let encodedString = endPoint.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
现在编码字符串:
"htttp://xyz.com/t/restaurants-us?KEY=someKey&filters=%7B%2522locality%2522:%7B%2522$eq%2522:%2522miami%2522%7D%7D"
但是现在,当我创建一个NSURL
会话并发送请求时,我从服务器收到了一个意外的响应:
Reply from server:
{
"error_type" = InvalidJsonArgument;
message = "Parameter 'filters' contains an error in its JSON syntax. For documentation, please see: http://developer.factual.com.";
status = error;
version = 3;
}
因此,如果我不编码字符串,我将无法创建NSURL
。
但是如果我编码并发送请求,服务器将无法处理该请求。
任何人都可以提出解决方法。当您声明
端点时,您已经对一些字符(引号)进行了百分比编码。当您要求iOS对其进行百分比编码时,它将百分比编码为百分比编码。解码encodedString
会导致:
htttp://xyz.com/t/restaurants-us?KEY=someKey&filters={%22locality%22:{%22$eq%22:%22miami%22}}
相反,您应该从端点中的实际引号开始:
let endPoint:String = "htttp://xyz.com/t/restaurants-us?KEY=someKey&filters={\"locality\":{\"$eq\":\"miami\"}}"
是的,当我开始引用时,它起了作用。非常感谢。
let endPoint:String = "htttp://xyz.com/t/restaurants-us?KEY=someKey&filters={\"locality\":{\"$eq\":\"miami\"}}"