簡體   English   中英

CURLOPT_POSTFIELDS可變格式

[英]CURLOPT_POSTFIELDS varaible format

當我嘗試使用以下類型的格式時,我嘗試使用cURL發布參數: CURLOPT_POSTFIELDS =>“ label = sample”

我確實在服務器中使用“ sample”作為其值獲取了“ label”鍵,但是當我將其作為變量發送出去時,卻在服務器中將其清空了。 CURLOPT_POSTFIELDS =>“ label = $ email”

 $curl = curl_init();
        $user_info=$this->web_model->retriveUserInfo();
        $email=$user_info->email;
  curl_setopt_array($curl, array(
  CURLOPT_URL => "https://test.bitgo.com/api/v2/".$coin."/wallet/".$wallet_id."/address",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "label=$email",
  CURLOPT_HTTPHEADER => array(
    "Accept: */*",
    "Accept-Encoding: gzip, deflate",
    "Authorization: Bearer v2x4e7cf3fb7e6c2e87bf8103e49756b3892b2e350d6cdbaeb65757980",
    "Cache-Control: no-cache",
    "Connection: keep-alive",
    "Content-Length: 11",
    "Content-Type: application/x-www-form-urlencoded",
    "Host: test.bitgo.com",
    "Postman-Token: b3f2ee7c-9a19-479b-bfe2-27000c90e3c7,d611bde9-3eb1-4e2b-b8f5-a7a5f5485726",
    "User-Agent: PostmanRuntime/7.15.2",
    "cache-control: no-cache"
  ),
));

$response = curl_exec($curl);
$response = json_decode($response, true);
$err = curl_error($curl);

curl_close($curl);

我的主要問題是變量的CURLOPT_POSTFIELDS格式!

Doc談到CURLOPT_POSTFIELDS:

此參數可以作為urlencoded字符串(如“ para1 = val1&para2 = val2&...”)傳遞,也可以作為字段名稱為鍵且字段數據為值的數組傳遞。

所以你可以:

  1. CURLOPT_POSTFIELDS => ['label' => $email],替換: CURLOPT_POSTFIELDS => "label=$email",如果您需要更多數據作為POST字段傳遞,則只需添加另一對$key => $value或在設置curl選項之前對其進行准備。

  2. 通過http_build_query設置POST字段:

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 其中$ ch是curl句柄,$ data是$ key => $ value對的數組,其中$ key是字段名稱。

但請記住:

將數組傳遞給CURLOPT_POSTFIELDS會將數據編碼為multipart / form-data,而傳遞URL編碼的字符串會將數據編碼為application / x-www-form-urlencoded。

非常感謝最后我不得不簡單地使用Guzzle庫

 $client = new  GuzzleHttp\Client(['base_uri' => 'https://test.bitgo.com/api/v2/']);
            $response = $client->post($coin.'/wallet/'.$wallet_id.'/address', [
            'headers' => [
                'Authorization' => 'Bearer v2x4e7cf3fb7e6c2e87bf8103e4975dsddbaeb65ba017b555757980'],
            'form_params' => [

                "label" => $email

            ] 

非常非常有用

你可以試試這個

function curl($post = array(), $url, $token = '', $method = "POST", $json = false, $ssl = false){
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $url);    
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
    if($method == 'POST'){
        curl_setopt($ch, CURLOPT_POST, true);
    }
    if($json == true){
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bearer '.$token, 'Content-Length: ' . strlen(json_encode($post))));
    }else{
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
    }       
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSLVERSION, 6);
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    // Proxy example only
    if (!empty($proxy)) {
        curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:888');
        if (!empty($proxyAuth)) {
            curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');
        }
    }
    if($ssl == false){
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    }
    $response = curl_exec($ch); 
    $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $this->statusCode = $statusCode;

    if (curl_error($ch)) {  
        $error = 'CURL_ERROR '.$statusCode.' - '.curl_error($ch);
        // print_r('CURL_ERROR '.$statusCode.' - '.curl_error($ch));                    
        throw new Exception('CURL_ERROR '.curl_error($ch), $statusCode);
    }
    curl_close($ch);
    return $response;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM