php - 使用 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;
解决方案
如果在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,这可能需要有所不同。
推荐阅读
- c# - 如何在 C# 中重用查询
- javascript - 如何修改此代码以不要求文件。[JavaScript]
- python - sys.stdin.readline().split() 排序时,整数序列很奇怪
- javascript - 在 javascriot 中使用 Select 的计算器
- reactjs - 如何在 Redux-Toolkit 中改变 asyncThunk 挂起状态的状态?
- python - pyspark:数据帧头转换
- angularjs - 如何知道 Web 应用程序是在浏览器上访问还是从团队自定义应用程序访问
- c++ - Google 测试 (gtest) `EXPECT_TRUE()` 宏不会以 `std::is_same<>` 模板作为输入进行编译
- elasticsearch - json数据有方括号logstash如何解释它?
- python - 你如何更新表以适应新列?