【问题标题】:Having trouble with curl GET in PHP在 PHP 中使用 curl GET 时遇到问题
【发布时间】:2016-06-21 16:00:19
【问题描述】:

我正在尝试从 curl GET 请求中获取 JSON 响应,但无法使其正常工作。我已经尝试了几个例子,但没有得到任何回报。这就是我正在尝试的:

$Url = "http://app.whistle.com/api/dogs/132376/dailies/16955&X-Whistle-AuthToken=xxxxxxxxxxxxxxxxxxxxxxxx";

$ch = curl_init($Url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $result;

有人知道为什么这不起作用吗?

【问题讨论】:

  • 它返回 401:未授权。我想您需要传递的身份验证方法还有更多内容。
  • 你只是假设成功。在处理外部资源时永远不要假设成功。始终假设失败,检查失败,并将成功视为惊喜。 if ($result === false) { die(curl_error($ch)); }。如果 curl_exec 失败,它返回布尔值 false,它作为零长度的不可见字符串回显。
  • 真的很奇怪,它出现在我的浏览器中。我设法从我手机上的 iOS 应用程序中使用 charles 代理获取令牌,但不知道为什么它曾允许此 url 显示在我的 mac 浏览器中,就像一开始一样(现在仍然如此)。显然,这给了我一个开始寻找的地方。谢谢。
  • 您的问题得到解答了吗?如果是,您可以将其标记为已回答吗?

标签: php curl get


【解决方案1】:

网址返回 HTTP 401 状态(未授权)。这意味着身份验证失败。您应该检查您的身份验证参数。检查您是否需要设置用户名和密码,或者您的 AuthToken 是否有效。

curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");

【讨论】:

    【解决方案2】:

    您似乎在 URL 中添加了X-Whistle-AuthToken。首先,会这样做,从? 开始,因为它是第一个参数,而不是&

    其次,由于此X-Whistle-AuthTokenX- 开头,我假设它是一个 HTTP 标头,需要使用 CURL 作为 HTTP 标头发送,而不是作为 HTTP GET 参数。 但您必须检查相应的文档以确保 API 如何期望您的答案。

    这样的事情可能会正常工作:

    $Url = "http://app.whistle.com/api/dogs/132376/dailies/16955";
    
    $ch = curl_init($Url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Whistle-AuthToken: 214cca48930110a634cfc34fe9b4ee17"));
    
    $result = curl_exec($ch);
    if ($result === false){ die(curl_error($ch)); }
    
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    var_dump($result);
    

    最后但同样重要的是:

    更改您的 AuthToken。您刚刚泄露了一个可能应该保持私有的私有令牌。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多