Аламофире с -d - PullRequest
       13

Аламофире с -d

0 голосов
/ 05 декабря 2018

Мне нужно сделать запрос как этот Почтальон, но в Alamofire

curl -X DELETE \
  http://someUrl \
  -H 'authorization: JWT someToken' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/x-www-form-urlencoded' \
  -H 'postman-token: 0149ef1e-5d45-34ce-3344-4b658f01bd64' \
  -d id=someId

Я думаю, это должно быть что-то вроде:

let headers = ["Content-Type": "application/x-www-form-urlencoded", "Authorization": "JWT someToken"]
let params: [String: Any] = ["id": "someId"]
Alamofire.request("http://someUrl", method: .delete, parameters: params, headers: headers).validate().responseJSON { responseJSON in
            switch responseJSON.result {
            case .success( _):
                let data = responseJSON.result.value!
                print(data)
            case .failure(let error):
                        print(error.localizedDescription)

            }
}

Как я могу проверить, что мой запрос имеетопция, подобная этой от cUrl - -d id=someId

1 Ответ

0 голосов
/ 05 декабря 2018

Вы делаете это:

Alamofire.request("http://someUrl", method: .delete, parameters: params, headers: headers).validate().responseJSON { ... }

На самом деле, его можно деконструировать так:

let request = Alamofire.request("http://someUrl", method: .delete, parameters: params, headers: headers)

request.validate().responseJSON { ... }

request - это DataRequest, который наследуется от Requestс довольно большим переопределением debugDescription, которое вызывает curlRepresentation().

Если вы напечатаете request, у вас будет:

$> CredStore - performQuery - Error copying matching creds.  Error=-25300, query={
    atyp = http;
    class = inet;
    "m_Limit" = "m_LimitAll";
    ptcl = http;
    "r_Attributes" = 1;
    sdmn = someUrl;
    srvr = someUrl;
    sync = syna;
}
$ curl -v \
    -X DELETE \
    -H "Accept-Encoding: gzip;q=1.0, compress;q=0.5" \
    -H "User-Agent: iOSTest/1.0 (nt.iOSTest; build:1; iOS 11.4.0) Alamofire/4.7.3" \
    -H "Accept-Language: en;q=1.0, fr-FR;q=0.9" \
    "http://someUrl?id=someId"

Довольно круто, право?Но нет варианта -d.Вы даже можете проверить это с помощью print(request.request.httpBody) и получить:

$> nil

Чтобы исправить это, используйте параметр encoding (ParameterEncoding) в init.Вы можете использовать по умолчанию JSONEncoding, URLEncoding и PropertyListEncoding.

Но вы хотите поместить параметр в httpBody, поэтому используйте URLEncoding(destination: .httpBody):

Alamofire.request("http://someUrl", method: .delete, parameters: params, encoding: URLEncoding(destination: .httpBody), headers: headers)

И вы получите:

$>CredStore - performQuery - Error copying matching creds.  Error=-25300, query={
    atyp = http;
    class = inet;
    "m_Limit" = "m_LimitAll";
    ptcl = http;
    "r_Attributes" = 1;
    sdmn = someUrl;
    srvr = someUrl;
    sync = syna;
}
$ curl -v \
    -X DELETE \
    -H "Authorization: JWT someToken" \
    -H "User-Agent: iOSTest/1.0 (nt.iOSTest; build:1; iOS 11.4.0) Alamofire/4.7.3" \
    -H "Accept-Language: en;q=1.0, fr-FR;q=0.9" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept-Encoding: gzip;q=1.0, compress;q=0.5" \
    -d "id=someId" \
    "http://someUrl"
...