Ios alamofire 499在使用头和参数发出get请求时
我正在尝试使用Alamofire和Swift 3和XCode 8,使用JSON参数和自定义头创建HTTP GET请求。我已经能够成功地在几个不同的路径上使用它,但是我似乎无法在一个特定的路径上破解代码。下面是我尝试做的等效CURL和我尝试用来复制它的Swift代码 卷曲请求(工程): Alamofire请求(不工作): 下面是我得到的错误,如果它有帮助的话:Ios alamofire 499在使用头和参数发出get请求时,ios,swift,http,alamofire,Ios,Swift,Http,Alamofire,我正在尝试使用Alamofire和Swift 3和XCode 8,使用JSON参数和自定义头创建HTTP GET请求。我已经能够成功地在几个不同的路径上使用它,但是我似乎无法在一个特定的路径上破解代码。下面是我尝试做的等效CURL和我尝试用来复制它的Swift代码 卷曲请求(工程): Alamofire请求(不工作): 下面是我得到的错误,如果它有帮助的话: [Request]: <url>/<route> [Response]: <NSHTTPURLRespons
[Request]: <url>/<route>
[Response]: <NSHTTPURLResponse: 0x608000226fc0> { URL: <url> } { status code: 499, headers {
"Cache-Control" = "no-cache, no-store";
Connection = "keep-alive";
"Content-Length" = 435;
"Content-Type" = "text/html; charset=utf-8";
Date = "Sun, 25 Dec 2016 23:45:38 GMT";
Server = Cowboy;
} }
[Data]: 435 bytes
[Result]: FAILURE: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))
[Timeline]: Timeline: { "Request Start Time": 504402284.293, "Initial Response Time": 504402339.616, "Request Completed Time": 504402339.617, "Serialization Completed Time": 504402339.617, "Latency": 55.323 secs, "Request Duration": 55.324 secs, "Serialization Duration": 0.000 secs, "Total Duration": 55.324 secs }
[请求]:/
[响应]:{URL:}{状态代码:499,标题{
“缓存控制”=“无缓存,无存储”;
连接=“保持活动”;
“内容长度”=435;
“内容类型”=“文本/html;字符集=utf-8”;
日期=“太阳,2016年12月25日23:45:38 GMT”;
服务器=牛仔;
} }
[数据]:435字节
[结果]:失败:responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(错误域=NSCOAERORDOMAIN代码=3840“字符0周围的无效值”。“用户信息={NSDebugDescription=字符0周围的无效值。}))
[时间线]:时间线:{“请求开始时间”:504402284.293,“初始响应时间”:504402339.616,“请求完成时间”:504402339.617,“序列化完成时间”:504402339.617,“延迟”:55.323秒,“请求持续时间”:55.324秒,“序列化持续时间”:0.000秒,“总持续时间”:55.324秒}
一个问题是,您试图在请求体中发送JSON,但您是在GET
请求中发送JSON。但是请求主体在GET
请求中没有定义,因为数据应该在URL中。如果您要在请求中包含一个主体,那么您确实应该执行POST
,而不是GET
显然,curl
正在设置GET
请求的主体,因为您提供了set-X GET
(即使-d
选项表示它使用POST
请求;如果您省略了-X GET
,由于-d
选项,默认情况下它将成为POST
请求)
但是
URLSession
不允许您为GET
请求指定httpBody
(它也不应该)。如果您想在请求正文中发送数据,您应该执行POST
(即在Alamofire请求
中,方法
应该是.POST
).这非常有帮助。非常感谢。事实上,curl
正在发挥作用,这让我很不舒服,所以这有助于理解为什么会出现这种情况。我将在请求正文中为GET使用URL编码的参数,为POST使用JSON。
let headers: HTTPHeaders = [ "email": "example@example.com", "token": "ASDFJKL"]
let parameters: Parameters = [ "xxxx": "111111111"]
Alamofire.request(url, method: .get, parameters: parameters, encoding: JSONEncoding.default,
headers: headers).responseJSON { response in
debugPrint(response)
}
[Request]: <url>/<route>
[Response]: <NSHTTPURLResponse: 0x608000226fc0> { URL: <url> } { status code: 499, headers {
"Cache-Control" = "no-cache, no-store";
Connection = "keep-alive";
"Content-Length" = 435;
"Content-Type" = "text/html; charset=utf-8";
Date = "Sun, 25 Dec 2016 23:45:38 GMT";
Server = Cowboy;
} }
[Data]: 435 bytes
[Result]: FAILURE: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))
[Timeline]: Timeline: { "Request Start Time": 504402284.293, "Initial Response Time": 504402339.616, "Request Completed Time": 504402339.617, "Serialization Completed Time": 504402339.617, "Latency": 55.323 secs, "Request Duration": 55.324 secs, "Serialization Duration": 0.000 secs, "Total Duration": 55.324 secs }