Ios alamofire 499在使用头和参数发出get请求时

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

我正在尝试使用Alamofire和Swift 3和XCode 8,使用JSON参数和自定义头创建HTTP GET请求。我已经能够成功地在几个不同的路径上使用它,但是我似乎无法在一个特定的路径上破解代码。下面是我尝试做的等效CURL和我尝试用来复制它的Swift代码

卷曲请求(工程):

Alamofire请求(不工作):

下面是我得到的错误,如果它有帮助的话:

[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 }