【发布时间】:2014-09-12 15:49:21
【问题描述】:
我正在尝试访问 API。我可以从 PHP 做到这一点
<?php
$url = 'http://apiurl/path';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('API-KEY: myKey'));
//curl_setopt($ch, CURLOPT_POST, 1);
$output = curl_exec($ch);
$curlInfo = curl_getinfo($ch);
curl_close($ch);
echo $output; /*success!*/
但是,从命令行执行此操作会触发 403 错误。
curl -i -v -H "API-KEY: myKey" http://apiurl/path
/*failure!*/
PHP 有何不同之处?还是我的命令行代码中有语法错误?
【问题讨论】:
-
据我所见,您做的事情是正确的——但命令行 Curl 可能会发送 User-Agent,而我的 php 安装不会。这是唯一的区别。尝试添加
-H "User-Agent:以删除用户代理,看看它是否有所作为。 (您的 API 密钥中可能有一些字符在命令行上被不同的解释?) -
@mattgibson 是的,同一台服务器。我可以在命令行上禁用用户代理吗?使它们完全相同。
-
是的;添加
-H "User-Agent:"— 类似于您对“API-KEY”所做的操作,但如果您不提供任何值,则应删除标题。 -
@MattGibson 抱歉,我没有看到您已经提供了用户代理重置。您能否将其作为答案提交,以便我接受?谢谢!