2016-12-07 20 views
4

私はPerfectサーバを設定しましたが、私はすべてのAPIを書いていますが、私はCURLに固執しています。 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/

答えて

8

は、検索の多くの後、私はちょうどこのCの例を参照してください。詳しくは何か

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))") 

} 

を見つけ https://curl.haxx.se/libcurl/c/example.html

あなたは非同期行くとき
+0

ありがとうございます!これで最終的に私の問題は解決しました! 1つのことを追加するだけで、使用中にメモリに "byteArray"を保持する責任があります。グローバル変数として(一時的に)追加して動作させる必要がありました。 – gabriellanata

+0

@gabriellanataそれはあなたを助けてくれて良かった:) –

+0

これは私のために働いたが、私は文字列の代わりにCURLOPT_POSTFIELDSの代わりにCURLOPT_COPYPOSTFIELDSを使用しなければならなかった。それ以外の場合は、ガベージテキストになります。 – Tyress

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) ?? "")") 

     } 
    } 
} 
関連する問題