2013-10-22 56 views
2

我想調用一個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=1form_key = Mage::getSingleton('core/session', array('name' => 'adminhtml'))->getFormKey())是必需的。在我的情況下,form_key會導致錯誤。但醜陋的Cookie字符串已經存在 - 仍在尋找更漂亮的解決方案。

回答

0

對我來說,這看起來像你正在試圖寫一些黑客的東西,你可以做更優雅的,正確的,完全記錄的方式。請看看Magento API。

如果你想刪除的產品(或做別的事):

http://www.magentocommerce.com/api/soap/catalog/catalogProduct/catalog_product.delete.html

你會得到一個適當的響應返回知道如果事情已經成功了。如果有些東西是API無法做到的,那麼你可以根據需要擴展/破解它。

要開始,您需要一個API用戶/密碼,並使用SOAP加快速度。 Magento文檔中的例子就足夠了。祝你好運!

+0

一般而言,您是對的:-)在這種情況下,我們使用「M2E Pro」擴展從ERP軟件創建eBay/Amazon產品目錄/產品。所以我們必須調用M2E-Pro功能,這些功能在SOAP或者類似的東西中是不可用的。 –

相關問題