cURL post PHP 失败
cURL post with PHP failing
使用 Postman,我已经能够成功地创建一个 API 调用来从网络服务器检索信息。
然而,我对 PHP 做同样的事情却没有成功。以下是我试图在 PHP.
中复制的 Postman 的一些屏幕截图
这是我的 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 我故意把 url 和密钥搞砸了。
我正在尝试按照此处概述的说明进行操作 - https://developers.neto.com.au/documentation/engineers/api-documentation/products/getitem
一些可能会阻止您的代码工作的事情:
1。数组到字符串的转换
您已将请求的 body 声明为 $body
中的数组。在将其传递给 cURL 之前,您需要 JSON-encode 它:
$body = array('Filter' => array('SKU'=>$filters, 'OutputSelector' => $selectors));
$bodyJSON = json_encode($body);
[...]
curl_setopt($ch, CURLOPT_POSTFIELDS, $bodyJSON);
2。 HTTPS 请求
如果您收到空响应,您还需要为 SSL 通信配置 cURL。一个快速解决方法是忽略远程服务器证书有效性:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
虽然这可行,但请参阅 this answer 以获得更好的解决方案。
3。缺少 Content-Type
发送原始后域时,一些服务器需要知道您发送的数据类型。这是通过设置 Content-Type
header:
$headers = array(
"Content-Type: application/json",
[...]
);
使用 Postman,我已经能够成功地创建一个 API 调用来从网络服务器检索信息。
然而,我对 PHP 做同样的事情却没有成功。以下是我试图在 PHP.
中复制的 Postman 的一些屏幕截图这是我的 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 我故意把 url 和密钥搞砸了。
我正在尝试按照此处概述的说明进行操作 - https://developers.neto.com.au/documentation/engineers/api-documentation/products/getitem
一些可能会阻止您的代码工作的事情:
1。数组到字符串的转换
您已将请求的 body 声明为 $body
中的数组。在将其传递给 cURL 之前,您需要 JSON-encode 它:
$body = array('Filter' => array('SKU'=>$filters, 'OutputSelector' => $selectors));
$bodyJSON = json_encode($body);
[...]
curl_setopt($ch, CURLOPT_POSTFIELDS, $bodyJSON);
2。 HTTPS 请求
如果您收到空响应,您还需要为 SSL 通信配置 cURL。一个快速解决方法是忽略远程服务器证书有效性:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
虽然这可行,但请参阅 this answer 以获得更好的解决方案。
3。缺少 Content-Type
发送原始后域时,一些服务器需要知道您发送的数据类型。这是通过设置 Content-Type
header:
$headers = array(
"Content-Type: application/json",
[...]
);