我想調用一個URL,並想用PHP獲得結果,使用file_get_contents
(我知道CURL,但首先我想用file_get_contents
來嘗試它)。在我的情況下,這是對magento
商店系統的請求,這需要以前完成登錄到後端。帶頭文件的file_get_contents:在magento或common中發送當前的頭文件或當前的cookie
如果我在瀏覽器中手動執行URL,那麼右邊的頁面即將到來。如果我發送的URL爲file_get_contents
,我也會登錄(因爲我向請求中添加了Cookie),但每次我只收到儀表板主頁時,可能會導致重定向。
我試圖模擬相同的http請求,因爲我的瀏覽器發送它。我的問題是:是否有可能將相同的頭數據(Cookie,會話ID等)直接作爲參數發送到file_get_contents
而無需手動序列化?
這是一個常見的PHP問題,基本的腳本是:
$postdata = http_build_query(
array(
'var1' => 'some content',
'var2' => 'doh'
)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents('http://example.com/submit.php', false, $context);
而在我的情況下,代碼爲:
$postdata = http_build_query(
array
(
'selected_products' => 'some content',
)
);
$opts = array('http' =>
array
(
'method' => 'POST',
'header' => "Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\n".
"Cookie: __utma=".Mage::getModel('core/cookie')->get("__utma").";".
"__utmz=".Mage::getModel('core/cookie')->get("__utmz").
" __utmc=".Mage::getModel('core/cookie')->get("__utmc").';'.
"adminhtml=".Mage::getModel('core/cookie')->get("adminhtml")."\r\n".
"X-Requested-With: XMLHttpRequest\r\n".
"Connection: keep-alive\r\n".
"Accept: text/javascript, text/html, application/xml, text/xml, */*\r\n".
"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0",
'content' => $postdata
)
);
$context = stream_context_create($opts);
var_dump(file_get_contents($runStopAndRemoveProducts, false, $context));
結果應該是相同的錯誤消息我會得到在瀏覽器中通過手動調用URL(「請選擇一些產品」作爲純文本),但響應是作爲html網站的完整儀表板主頁。
我正在尋找這樣的腳本。我想,以確保所有的參數都沒有手工打造自動設置cookie字符串和其他的人:)
file_get_contents('http://example.com/submit.php', false, $_SESSION["Current_Header"]);
編輯:我發現了錯誤,兩個特殊的GET參數(isAjax=1
和form_key
= Mage::getSingleton('core/session', array('name' => 'adminhtml'))->getFormKey()
)是必需的。在我的情況下,form_key
會導致錯誤。但醜陋的Cookie字符串已經存在 - 仍在尋找更漂亮的解決方案。
一般而言,您是對的:-)在這種情況下,我們使用「M2E Pro」擴展從ERP軟件創建eBay/Amazon產品目錄/產品。所以我們必須調用M2E-Pro功能,這些功能在SOAP或者類似的東西中是不可用的。 –