Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当相同的请求在Postman中工作时,为什么我对这个API的PHP cURL请求没有提取任何数据?_Php_Api_Curl - Fatal编程技术网

当相同的请求在Postman中工作时,为什么我对这个API的PHP cURL请求没有提取任何数据?

当相同的请求在Postman中工作时,为什么我对这个API的PHP cURL请求没有提取任何数据?,php,api,curl,Php,Api,Curl,编辑:我在代码中添加了一个条件语句来检查curl_error$ch的结果。它显然没有返回错误。我还添加了一个curl_setop来将CURLOPT_POST设置为true 我正在尝试使用PHP和cURL连接到API,并回调一个JSON响应以显示在页面上。然而,虽然我最初的访问令牌请求通过一个简单的GET请求成功,但我随后的POST请求并没有返回任何数据 我已经能够使用下面的Postman屏幕截图来测试POST请求并成功收到响应,因此,我在POST请求中发送的数据似乎是正确的,访问令牌似乎可以工作

编辑:我在代码中添加了一个条件语句来检查curl_error$ch的结果。它显然没有返回错误。我还添加了一个curl_setop来将CURLOPT_POST设置为true

我正在尝试使用PHP和cURL连接到API,并回调一个JSON响应以显示在页面上。然而,虽然我最初的访问令牌请求通过一个简单的GET请求成功,但我随后的POST请求并没有返回任何数据

我已经能够使用下面的Postman屏幕截图来测试POST请求并成功收到响应,因此,我在POST请求中发送的数据似乎是正确的,访问令牌似乎可以工作,但是当我的PHP发出请求时,当我使用json解码然后打印以显示json响应的内容时,似乎没有返回任何内容

我对cURL非常不熟悉,因此我的代码取自以下链接的教程:。API文档在以下链接中提供:

以下是我的代码:

$nuacom\u get\u api\u key\u url=https://api.nuacom.ie/login_digest?email=abc@xyz.com&pass=123//stackoverflow的虚拟凭据 $response\u json=file\u get\u contents$nuacom\u get\u api\u key\u url; $response\u array=json\u decode$response\u json,true; $session_token=$response_数组['session_token']; //API URL $url='1https://api.nuacom.ie/v1/reports/queue_inbound_stats'; //创建一个新的cURL资源 $ch=curl_init$url; //安装程序请求通过POST发送json $data=数组 分组依据=>天, 时间从=>2020-08-27 00:00:01, 时间到=>2020-08-27 23:59:59, 队列=>1, 客户端安全令牌=>$session\u令牌 ; $payload=json_encode$data; //将请求类型设置为POST curl_setopt$ch,CURLOPT_POST,1; //将编码的JSON字符串附加到POST字段 curl_setopt$ch,CURLOPT_POSTFIELDS$payload; //将内容类型设置为application/json curl_setopt$ch,CURLOPT_HTTPHEADER,数组'Content-Type:application/json'; //返回响应而不是输出 curl_setopt$ch,CURLOPT_RETURNTRANSFER,true; //执行POST请求 $result=curl\u exec$ch; ifcurl\u exec$ch==false { 回显“卷曲错误:”。卷曲错误$ch; } 其他的 { echo“操作已完成,无任何错误”;//这是执行的行 } //闭卷曲资源 curl_close$ch; $response\u array=json\u decode$result; 打印\u r$response\u数组; 邮递员成功回应:


任何帮助都将不胜感激!我确信,由于对cURL和POST请求不熟悉,我遗漏了一些小东西。

我的错。也许答案比评论更简单,这样我就可以把重要的部分格式化

您正在使用要发送的数据创建阵列:

$data = array(
    "group_by" => "day",
    "time_from" => "2020-08-27 00:00:01",
    "time_to" => "2020-08-27 23:59:59",
    "queue" => "1",
    "client-security-token" => $session_token
);
  
当您对它进行json_编码以将其发送到API时,您当前会将其包装在另一个数组中

$payload = json_encode(array($data));
结果将是:

[{"group_by":"day","time_from":"2020-08-27 00:00:01","time_to":"2020-08-27 23:59:59","queue":"1","client-security-token":"token"}]
$ch = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_URL => 'https://api.nuacom.ie/v1/reports/queue_inbound_stats?' . http_build_query(array(
        "group_by" => "day",
        "time_from" => "2020-08-27 00:00:01",
        "time_to" => "2020-08-27 23:59:59",
        "queue" => "1",
        "client-security-token" => $session_token
    )),
    CURLOPT_POST => 1
));
curl_exec($ch);
json数组。queue_inbound_stats端点的api文档似乎要求数据不要像这样包装在另一个数组中

{"group_by":"day","time_from":"2020-08-27 00:00:01","time_to":"2020-08-27 23:59:59","queue":"1","client-security-token":"token"}
因此,只需省略再次包装$data数组:

$payload = json_encode($data);

如果您的postman请求工作正常,您可以轻松地将请求导出到php/curl。这个不错的功能让你的生活更轻松。只需单击代码按钮,就可以将请求导出到curl、php/curl、C、Go和其他几个选项


在postman中,您通过URL发送数据;在curl中,您通过json编码的请求正文发送数据,向postman发送的等效curl代码为:

[{"group_by":"day","time_from":"2020-08-27 00:00:01","time_to":"2020-08-27 23:59:59","queue":"1","client-security-token":"token"}]
$ch = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_URL => 'https://api.nuacom.ie/v1/reports/queue_inbound_stats?' . http_build_query(array(
        "group_by" => "day",
        "time_from" => "2020-08-27 00:00:01",
        "time_to" => "2020-08-27 23:59:59",
        "queue" => "1",
        "client-security-token" => $session_token
    )),
    CURLOPT_POST => 1
));
curl_exec($ch);
。。。但在阅读文档时,他们似乎想要

$ch = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_URL => 'https://api.nuacom.ie/v1/reports/queue_inbound_stats',
    CURLOPT_POST => 1,
    CURLOPT_HTTPHEADER => array(
        'Content-Type: application/json',
        'client-security-token: '.$session_token,
    ),
    CURLOPT_POSTFIELDS => json_encode(array(
        "group_by" => "day",
        "time_from" => "2020-08-27 00:00:01",
        "time_to" => "2020-08-27 23:59:59",
        "queue" => "1",
    )),
    CURLOPT_POST => 1
));
curl_exec($ch);
因此,似乎将所有内容都放在URL中,就像你对邮递员所做的那样,是一种未定义/未记录的行为,而且不管怎样,它只是碰巧起到了作用


此外,客户端安全令牌不在json中,根据身份验证文档,它可以在标题中,或者在url中,但不在json中,您的curl代码试图将其放入json中,而您的Postman代码将其放入url中,与其他内容一起..

能否在curl\u关闭之前运行curl\u error$ch并显示输出?此外,我不确定您是否真的需要$payload=json\u encodearray$data;或者如果json_encode$数据不够。您可能还缺少使其成为POST的curl_setoptrequest@j4g0我已经编辑了这篇文章,将其添加到我的代码和结果中。它显然没有返回任何错误。您是否尝试添加curl_setopt$ch,CURLOPT_POST,1;在curl_setopt$ch之前,CURLOPT_POSTFIELDS$payload;为了确保这是一个POST请求?如果您的邮递员工作正常,它还可以导出php/curl代码,以便您更容易地单击代码并选择php。你为什么不使用这个功能?@AliKhalili这已经很好地工作了,谢谢你-我不知道邮递员提供了这个功能-你能添加这个作为答案吗?我已经做了这个更改,不幸的是没有任何区别。我已经起床了
用当前代码标注原始帖子的日期。print_r$response_array;的输出是什么?它似乎是一个空字符串,因为页面上显示的唯一输出是“操作已完成,无任何错误”。您的屏幕截图表明,在使用postman而不是发送请求正文时,您正在使用查询参数。您是否尝试将数据添加为参数,即&。。。不发送带有curl请求的POSTFIELDS?我已经尝试过了,是的-这是代码示例-这返回一个警告的PHP错误:file\u get\u contents 00:00:01'&time\u to='2020-08-27 23:59:59':无法打开流:HTTP请求失败!未找到HTTP/1.1 404