LoginSignup
0
1

More than 1 year has passed since last update.

【Swift5/Alamofire5】POSTリクエストでパラメータをBODYにセットする

Last updated at Posted at 2022-08-21

Swiftでの個人開発アプリでHTTP通信にAlamofire5を使ってみています。
POST通信でパラメータをリクエストボディにセットして送信できるようにしたいと思いましたが、
特に意識しないとクエリパラメータとしてセットされるようで、
上記対応するための書き方が意外と見つからなかったのでメモとして残します。

Alamofireとは?導入手順は?あたりのハナシは割愛します。

サンプルコード

まずはいきなりコードから。

import Alamofire

class TestAlamofire{
    // 送信先URL
    let requestUrl = "https://test.com/post"
    // リクエストパラメータ
    let param: Parameters = [
        "param1": "パラメータ1"
    ]
    // リクエストヘッダ
    let headers: HTTPHeaders = [
        "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"
    ]
    func postRequest() {
        // AlamofireでPOST送信
        AF.request(
                requestUrl,
                method: .post,
                parameters: param,
                encoding: URLEncoding.httpBody,
                headers: headers
            )
            .responseData { response in
                switch response.result {
                    case .success(let data):
                        print("success")
                    case .failure(let error):
                        print("error")
                }
            }
    }
}

要点

ポイント1:Content-Type=application/x-www-form-urlencoded にする。

    // リクエストヘッダ
    let headers: HTTPHeaders = [
        "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"
    ]

ポイント2:Alamofire.requestのencodingをURLEncoding.httpbodyにする。

        AF.request(
                requestUrl,
                method: .post,
                parameters: param,
                encoding: URLEncoding.httpBody,
                headers: headers
            )

ポイント1の記述で一旦パラメータを「key1=value1&key2=value2...」のかたちにしたうえで、
ポイント2でそのパラメータをリクエストボディに(整形+)セットして送信、
という流れになってるんだと解釈しています。
(直感的には、ポイント1で”application/json”を指定するのが正しそうな感じがしたんですが)

最後に

手短ですが、AlamofireのPOSTリクエスト送信で、
リクエストボディにパラメータをセットする書き方でした。
encodingとheadersの組合せを色々試しましたがこれ以外うまくいかなかったので、
現状これが正解かなと思っています。
もし他の書き方があればぜひコメントでご指摘下さい。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1