2

POST リクエストで json ドキュメントの形式でデータを送信するスクリプトを作成しようとしています。これを行うには、次のコードを使用しています。

struct RequestModel: Codable {
    var api_key: String
    var service_code: String
    var description: String
    var media_url: String
    var attribute: [String: String]
    var long: String
    var lat: String

    init(api_key: String, service_code: String, lat: String, long: String, media_url: String, description: String, attribute: [String: String]) {
        ...
    }
}

class ClassName {
    func send(lat: Double, long: Double, comment: String, photoURL: String, photoID: String) {

        let sendReqeust = RequestModel(api_key: "123456789", service_code: "987654321", lat: lat, long: long, media_url: photoURL, description: comment, attribute: ["request_type":"example"])

        print("URL in function \(sendReqeust.media_url)")

        guard let uploadData = try? JSONEncoder().encode(sendReqeust) else {
            return
        }
        print(String(data: uploadData, encoding: .utf8)!)

        let url = URL(string: "http://example.com")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = uploadData

        var responseToken: String = ""

        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            ...
        }
        task.resume()
    }   
}

問題は mediaURL にあります。URL をエンコードすると、エスケープ文字が URL 文字列に追加されます。

最初の印刷物が得られます

https://example.com/

ただし、エンコード後の出力は次のようになります。

https:\/\/example.com\/

URL からエスケープ文字を削除するにはどうすればよいですか? エスケープ文字が含まれていると、URL が正しく解決されません。

  • ヘッダーの一部として追加しようとしましたが、郵便配達員とアプリでテストした後、リクエスト本文を介して URL を渡す必要があると判断しました。
  • コーディング キーを設定しようとしましたが、エンコード時に URL が含まれません。
  • URL を String ではなく URL タイプとして渡そうとしましたが、まだ機能しません
4

0 に答える 0