2016-12-26 1 views
1

Alamofire와 Swift 3 및 XCode 8을 사용하여 JSON 매개 변수와 사용자 정의 헤더로 HTTP GET 요청을하려고합니다. 몇 가지 방법으로 성공적으로 사용할 수있었습니다. 이미 다른 경로를 사용하고 있지만, 특히 코드를 해독 할 수는 없습니다. 아래는 내가하려고하는 동등한 CURL과 그것을 복제하기 위해 사용하려는 Swift 코드입니다.alamofire 헤더와 매개 변수로 요청을받을 때 499

CURL 요청 (작품) :

curl -X GET url -d '{"xxxx": "111111111" }' -v -H "email: [email protected]" -H "token: ASDFJKL" -H 'Content-Type: application/json' 

Alamofire 요청 (작동하지 않습니다) : 여기

let headers: HTTPHeaders = [ "email": "[email protected]", "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 } 

답변

2

한 가지 문제는 요청 본문에 JSON을 보내려고하지만 GET 요청에서 처리하는 것입니다. 성. 그러나 데이터는 URL에 있어야하므로 요청 본문은 GET 요청에서 정의되지 않습니다. 요청에 본문을 포함하는 경우 GET이 아닌 POST을 사용해야합니다. 사용자가 설정 한 공급했기 때문에

은 분명히 curlGET 요청의 본문을 설정하는 -d 옵션이 POST 요청을 사용하고 있다고하더라도 -X GET (그리고 당신이 -X GET을 생략하는 경우, 그것은 참으로 그것을 의한 POST 요청을 만들 것 -d 옵션으로 인해 기본값).

하지만 URLSessionGET 요청에 대해 httpBody을 지정할 수 없습니다 (또는 그래야합니까?). 요청 본문에 데이터를 보내려면 POST (즉, Alamofire request에서 method.post이어야합니다)을 수행해야합니다.

+0

이것은 매우 유용했습니다. 정말 고맙습니다. '컬 (curl)'이 효과를 발휘한다는 사실이 나를 물리 치고 있었기 때문에 그것이 왜 그런지 이해하는 데 도움이됩니다. POSTS 요청 본문에서 GET 및 JSON에 URL 인코딩 매개 변수를 사용합니다. – brownmagik352

+1

허용. 정말 고마워! – brownmagik352

관련 문제