1
我试图访问API。我可以这样做从PHP为什么此CURL在PHP中工作,但不在shell中
<?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做不同?或者我的命令行代码中有语法错误?
从命令行删除它您是否在同一台服务器上运行这些? API服务器是否检查User-Agent头?您是否尝试过使用类似日志代理服务器的方式比较请求? (像[Charles](http://www.charlesproxy.com),或者[Burp](http://portswigger.net/burp/)?) – 2014-09-12 16:07:54
据我所见,你在做正确的事情 - 但命令行Curl可能会发送用户代理,而我的PHP安装不。这是唯一的区别。尝试添加'-H“User-Agent:'来删除用户代理以查看它是否有所作为(可能在API键中可能有一些字符在命令行中的解释不同) – 2014-09-12 16:15:03
@mattgibson是的, – 1252748 2014-09-12 16:17:23