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