发布到curl无效的API

时间:2018-05-18 10:20:18

标签: php curl

$headers = array();
$headers[] = 'Authorization: hmac ' .$websiteKey.':'.$hmac .':'.$nonce . ':'.$time;
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl,CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);    
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);

var_dump($result);


curl_close($curl);

我有上面的代码,我想发布到api。不知怎的,它不起作用。我尝试在结果变量上使用var_dump。结果是:

string(117) "{"Message":"The request entity's media type 'application/x-www-form-urlencoded' is not supported for this resource."}"

知道为什么不发布到api?

$ post =

的值
{"AmountDebit":10,"Currency":"EUR","Invoice":"testinvoice 123","Services":{"ServiceList":[{"Action":"Pay","Name":"ideal","Parameters":[{"Name":"issuer","Value":"ABNANL2A"}]}]}}

接头:

$headers[] = 'Authorization: hmac ' .$websiteKey.':'.$hmac .':'.$nonce . ':'.$time;

2 个答案:

答案 0 :(得分:2)

如果您在使用Curl进行POST调用时未指定Content-Type标头,则会使用值application/x-www-form-urlencoded添加一个。

来自Everything Curl book

  

使用curl' s -d选项进行POST会使其包含一个看起来像Content-Type的默认标题:application / x-www-form-urlencoded。这是您的典型浏览器将用于普通POST的内容。

     

许多POST数据接收者都不关心或检查Content-Type标头。

     

如果该标题对您不够好,您当然应该替换它,而是提供正确的标题。

根据您的要求判断,我想您需要将以下内容添加到脚本的顶部:

$headers[] = 'Content-Type: application/json';

但是,根据您要发布的确切API,可能需要另外。

答案 1 :(得分:-1)

您在使用之前是否已安装curl。 如果没有安装,请尝试谷歌安装Curl 并使用我的curl函数来发布请求它100%正常工作 -

public function curlPostJson() {
    $headers = [];
    $headers[] = 'Content-Type: application/json';
    $headers[] = 'Content-Length: ' .strlen(json_encode($paramdata));

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($paramdata));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
    $server_output = curl_exec($ch);
    curl_close($ch);
    return json_decode($server_output);
}