来自控制台的Azure API查询返回正确答案,但来自Curl-nothing

来自控制台的Azure API查询返回正确答案,但来自Curl-nothing,curl,microsoft-cognitive,Curl,Microsoft Cognitive,我正在使用微软Bing视频搜索API。此处测试:。 使用简单请求:https://api.cognitive.microsoft.com/bing/v5.0/videos/search?q=versace&count=105&offset=0&safeSearch=Strict&freshness=Day 控制台的结果有很多帖子。但当我尝试通过curl使用相同的请求时,它返回以下结果: { "_type": "Videos", "instrumentation": {

我正在使用微软Bing视频搜索API。此处测试:。
使用简单请求:
https://api.cognitive.microsoft.com/bing/v5.0/videos/search?q=versace&count=105&offset=0&safeSearch=Strict&freshness=Day

控制台的结果有很多帖子。但当我尝试通过curl使用相同的请求时,它返回以下结果:

{
    "_type": "Videos",
    "instrumentation": {
        "pageLoadPingUrl": "https://www.bingapis.com/api/ping/pageload?IG=3A7948EA98004565BA8792996C75073B&CID=38B87B1BA5B4653B13C371E1A41264EA&Type=Event.CPT&DATA=0"
    },
    "value": [] }
我发现,若我删除参数
freshness
,结果将给出更多的帖子。我需要此参数,因此“删除它”的情况不适合。
请帮帮我:
-如何使用或修改请求?
-为什么此请求可以从控制台正常工作,但不能通过curl正常工作?
谢谢

试试这个:

<?php

$args = array(
    'q' => 'versace',
    'count' => 105,
    'offset' => 0,
    'safeSearch' => 'Strict',
    'freshness' => 'Day');

$ch = curl_init("https://api.cognitive.microsoft.com/bing/v5.0/videos/search?" . http_build_query($args));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Ocp-Apim-Subscription-Key: YOUR_API_KEY'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$json = curl_exec($ch);
var_dump(json_decode($json));
curl_close($ch);
?>

我找到了可能的原因。如果我添加
'cc'=>'US'
'mkt'=>'en-US'
,它将返回结果。。。这真的很奇怪,因为官方文档没有说明该请求的默认值。这就是为什么来自不同国家的相同请求会得到不同的结果。

我真的很难过,我花了这么多时间才弄明白。

你确定要引用和/或转义URL吗?确切的命令行和环境将有助于了解。@cthrah我准确地编写了用于类似curl的url参数的字符串。你说逃跑是什么意思?。。我是否需要转义这个字符串中的某些内容?我假设当您说“used curl”时,您的意思是“在命令行中使用curl”。对吗?或者您正在使用libcurl?如果你能更精确一点的话,这将是很有帮助的。但使用命令行它返回正确的响应。尝试使用简单的调用:
那么,有什么问题吗?@cthrah是的,你是对的!谢谢它应该由htmlentities()包装。之后,它返回的itemsResult与我在顶部写的是一样的:数组“value”是空的。这真的很奇怪——这是我逐字逐句尝试的代码(API键除外),它让我得到了几十个响应,最上面的一个是。这个症状听起来很像是伪造的查询词。你真的应该分享你的代码片段。我完全复制了你的代码。唯一的变化是你的API密钥。我两个都试过了。在这两种情况下都得到空的“值”。