[解決済み】SwiftでPOSTメソッドを使ったHTTPリクエスト
2022-04-08 04:03:29
質問
私はSwiftでHTTPリクエストを実行し、URLに2つのパラメータをPOSTしようとしています。
例
リンク
www.thisismylink.com/postName.php
パラメータを指定します。
id = 13
name = Jack
一番簡単な方法は何でしょうか?
レスポンスは読みたくもない。私はただ、PHPファイルを通してデータベースの変更を実行するためにそれを送りたいだけなのです。
どのように解決するのですか?
Swift 3 以降では可能です。
let url = URL(string: "http://www.thisismylink.com/postName.php")!
var request = URLRequest(url: url)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
let parameters: [String: Any] = [
"id": 13,
"name": "Jack & Jill"
]
request.httpBody = parameters.percentEncoded()
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data,
let response = response as? HTTPURLResponse,
error == nil else { // check for fundamental networking error
print("error", error ?? "Unknown error")
return
}
guard (200 ... 299) ~= response.statusCode else { // check for http errors
print("statusCode should be 2xx, but is \(response.statusCode)")
print("response = \(response)")
return
}
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(responseString)")
}
task.resume()
どこで
extension Dictionary {
func percentEncoded() -> Data? {
return map { key, value in
let escapedKey = "\(key)".addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed) ?? ""
let escapedValue = "\(value)".addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed) ?? ""
return escapedKey + "=" + escapedValue
}
.joined(separator: "&")
.data(using: .utf8)
}
}
extension CharacterSet {
static let urlQueryValueAllowed: CharacterSet = {
let generalDelimitersToEncode = ":#[]@" // does not include "?" or "/" due to RFC 3986 - Section 3.4
let subDelimitersToEncode = "!$&'()*+,;="
var allowed = CharacterSet.urlQueryAllowed
allowed.remove(charactersIn: "\(generalDelimitersToEncode)\(subDelimitersToEncode)")
return allowed
}()
}
これは、基本的なネットワークエラーと高度なHTTPエラーの両方をチェックするものです。これはまた、クエリのパラメータを適切にパーセントエスケープします。
なお、私は
name
の
Jack & Jill
を説明するために、適切な
x-www-form-urlencoded
の結果
name=Jack%20%26%20Jill
これは,"パーセントエンコード "されたものです(つまり,スペースは
%20
と
&
に置き換わります。
%26
).
参照 この回答の前回の改訂版 は、Swift 2のレンダリングです。
関連
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] フォーム送信のようなJavaScriptのポストリクエスト
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] HTTP POST Web リクエストの作成方法
-
[解決済み] Firefox または Chrome ブラウザから HTTP POST リクエストを手動で送信する方法
-
[解決済み] node.jsでHTTP POSTリクエストはどのように行われるのですか?
-
[解決済み] POSTとPUT HTTP REQUESTの違いは何ですか?
-
[解決済み] cURL を使ってファイル付き POST データをアップロードする
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み】cURLを使用してファイルの内容をbodyエンティティとして送信する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン