PHP的cURL发布失败

时间:2018-06-24 08:46:37

标签: api curl post php-curl neto

使用邮递员,我已经能够成功创建一个API调用来从网络服务器检索信息。

但是,我在用PHP做同样的事情上一直没有成功。以下是我试图在PHP中复制的Postman的一些屏幕截图。

enter image description here enter image description here

这是我的PHP代码-

$filters = array("1234", "28");
$selectors = array("Brand", "Name");

$body = array('Filter' => array('SKU'=>$filters, 'OutputSelector' => $selectors));

$url = "https://xyz.neto.com.au/do/WS/NetoAPI";

$method = "POST";
$headers = array(
    "NETOAPI_ACTION: GetItem",
    "NETOAPI_KEY: xxxxxxx",
    "Accept: application/json",
    "NETOAPI_USERNAME: puneeth"     
);    

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($ch);
$err = curl_error($ch);

curl_close($ch);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}

P.S我故意弄错了网址和密钥。

我正在尝试遵循此处概述的说明-https://developers.neto.com.au/documentation/engineers/api-documentation/products/getitem

1 个答案:

答案 0 :(得分:1)

一些可能阻止您的代码正常工作的事情:

1。数组到字符串的转换

您已在$body中将请求的主体声明为数组。您需要先对其进行JSON编码,然后再将其传递给cURL:

$body = array('Filter' => array('SKU'=>$filters, 'OutputSelector' => $selectors));
$bodyJSON = json_encode($body);
[...]
curl_setopt($ch, CURLOPT_POSTFIELDS, $bodyJSON);

2。 HTTPS请求

如果收到空响应,则还需要配置cURL进行SSL通信。快速解决方案是忽略远程服务器证书的有效性:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

尽管可以,但是请参见this answer,以获得更好的解决方案。

3。缺少内容类型

在发送原始postfield时,某些服务器需要知道您要发送的数据类型。这是通过设置Content-Type标头完成的:

$headers = array(
    "Content-Type: application/json",
    [...]     
);