首页 > 解决方案 > 使用 curl 发布到 API 不起作用

问题描述

$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;

标签: phpcurl

解决方案


如果在Content-Type使用 Curl 进行 POST 调用时未指定标头,它将在 value 中添加一个application/x-www-form-urlencoded

来自一切卷曲

使用 curl 的 -d 选项进行 POST 会使其包含一个默认标头,类似于 Content-Type: application/x-www-form-urlencoded。这就是您的典型浏览器将用于普通 POST 的内容。

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

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

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

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

但根据您发布到的确切 API,这可能需要有所不同。


推荐阅读