2014-09-12 50 views
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做不同?或者我的命令行代碼中有語法錯誤?

+0

從命令行刪除它您是否在同一臺服務器上運行這些? API服務器是否檢查User-Agent頭?您是否嘗試過使用類似日誌代理服務器的方式比較請求? (像[Charles](http://www.charlesproxy.com),或者[Burp](http://portswigger.net/burp/)?) – 2014-09-12 16:07:54

+0

據我所見,你在做正確的事情 - 但命令行Curl可能會發送用戶代理,而我的PHP安裝不。這是唯一的區別。嘗試添加'-H「User-Agent:'來​​刪除用戶代理以查看它是否有所作爲(可能在API鍵中可能有一些字符在命令行中的解釋不同) – 2014-09-12 16:15:03

+0

@mattgibson是的, – 1252748 2014-09-12 16:17:23

回答

2

我能看到的唯一明顯區別是命令行PHP在默認情況下添加了User-Agent頭。可能您使用的API服務器拒絕來自Curl用戶代理的請求?嘗試通過添加參數-H "User-Agent:"

相關問題