4

完全なサーバーをセットアップし、すべての API を作成しましたが、CURL で行き詰まっています。これまで CURL で作業したことがないヘッダーを設定する方法がわかりません。

支払いゲートウェイをセットアップしていて、認証ヘッダーを設定して本文データを送信したいのですが、方法がわかりません。

例からhttp://perfect.org/docs/cURL.html

let curlObject = CURL(url: "http://www.perfect.org")

curlObject.perform {
    code, header, body in

    print("Request error code \(code)")
    print("Response: \(curlObject.responseCode)")
    print("Header: \(header)")
    print("Body: \(body)")
}

これを参照しましたが、どうすればいいですか?

https://curl.haxx.se/libcurl/c/

4

2 に答える 2

8

いろいろ探した結果、あるものを見つけました

let url = "https://httpbin.org/post"
let postParamString = "key1=value1&key2=value2"
let byteArray = [UInt8](postParamString.utf8)


let curl = CURL(url: url)

let _ = curl.setOption(CURLOPT_POST, int: 1)
let _ = curl.setOption(CURLOPT_POSTFIELDS, v: UnsafeMutableRawPointer(mutating: byteArray))
let _ = curl.setOption(CURLOPT_POSTFIELDSIZE, int: byteArray.count)

curl.perform { code, header, body in

        print("Request error code \(code) \n Response: \(curl.responseCode) \n Header: \(UTF8Encoding.encode(bytes:header)) \n Body: \(UTF8Encoding.encode(bytes: body))")

}

詳細については、このC の例を参照して ください https://curl.haxx.se/libcurl/c/example.html

于 2016-12-08T04:00:38.407 に答える
2

UnsafeMutableRawPointer は、非同期になるとおそらく殺されます。これはうまくいきます:

import cURL
import PerfectCURL

public class CurlHTTPRequest {

    public static func post(url: String, header: String, body: String, callback: @escaping (String)->Void) {

        let byteArray:[UInt8] = Array(body.utf8)

        let pointer = UnsafeMutablePointer<UInt8>.allocate(capacity: byteArray.count)
        pointer.initialize(from: byteArray, count: byteArray.count)

        let curlObject = CURL(url: url)
        curlObject.setOption(CURLOPT_POST, int: 1)
        curlObject.setOption(CURLOPT_HTTPHEADER, s: header)
        curlObject.setOption(CURLOPT_SSL_VERIFYPEER, int: 0)
        curlObject.setOption(CURLOPT_POSTFIELDS, v: pointer)
        curlObject.setOption(CURLOPT_POSTFIELDSIZE, int: byteArray.count)

        curlObject.perform { (code, header, body) in

            curlObject.close()

            callback("Code: \(code)\n Header: \(String(bytes: header, encoding: .utf8) ?? "")\n Body: \(String(bytes: body, encoding: .utf8) ?? "")")

        }
    }
}
于 2017-04-03T11:41:40.647 に答える