PHP卷发发送空参数

  • 本文关键字:参数 PHP php curl
  • 更新时间 :
  • 英文 :


卷发对我来说是新的。我正在尝试通过PHP卷曲集成API。我正在尝试访问的API需要将参数发送为键值对,而不是JSON。他们的文档中的示例卷曲请求是:

curl -i -X POST -d  'api_key=my_api_key' -d 
'email=john@doe.com' -d "first_name=Joe" -d "last_name=Doe" -d 
"cust_id=cus_401" 
https://serviceurl.com/api/create

我的代码显然正在将空参数发送到其API。

    $service_url = 'https://serviceurl.com/api/create';
    $curl = curl_init($service_url);
    $email = $this->session->userdata('email');
    $postArray = array(
        'api_key' => 'my_api_key',
        'email' => $email,
    );
    $curl_post_data = $postArray;
    curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);

    $curl_response = curl_exec($curl);
    if ($curl_response === false) {
        $info = curl_getinfo($curl);
        curl_close($curl);
        die('error occured during curl exec. Additioanl info: ' . var_export($info));
    }
    curl_close($curl);
    echo $curl_response;
    echo $info;

任何建议都将不胜感激。

您的curl php代码以multipart/form-data格式发送数据,但是通过其CLI调用示例可以明显看出,他们的API希望以application/x-www-form-urlencoded格式这些数据。

正如curl_setopt文档所解释的那样,当您给curlopt_postfields一个数组时,它将自动编码为 multipart/form-data,如果给它一个字符串,将自动假定application/x-www-form-urlencoded,并且是他们的curl cli invocation使用的。

幸运的是,PHP具有将数组编码为application/x-www-form-urlencoded格式的专用功能,称为http_build_query,因此 curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($curl_post_data));将解决您的apparently sending empty parameters问题。

另外,如果设置您的任何选项存在问题,curl_setopt将返回bool(false(,您的代码完全忽略了,并且不会被注意,则应解决该问题,您应该解决此问题,请考虑使用错误捕捉setopt包装器,喜欢

function ecurl_setopt ( /*resource*/$ch , int $option , /*mixed*/ $value ):bool{
    $ret=curl_setopt($ch,$option,$value);
    if($ret!==true){
        //option should be obvious by stack trace
        throw new RuntimeException ( 'curl_setopt() failed. curl_errno: ' . $ch .'. curl_error: '.curl_error($ch) );
    }
    return true;
}

最新更新