我想调用一个URL并希望使用file_get_contents
来获取PHP的结果(我知道CURL,但首先我想用file_get_contents
来尝试)。在我的情况下,这是对magento
商店系统的请求,这需要先前登录到后端。
如果我在浏览器中手动执行URL,则会出现正确的页面。如果我发送带有file_get_contents
的URL,我也会登录(因为我将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-Parameter(isAjax=1
和form_key
= Mage::getSingleton('core/session', array('name' => 'adminhtml'))->getFormKey()
)。在我的情况下,form_key
会导致错误。但丑陋的Cookie字符串已经存在 - 仍在寻找更漂亮的解决方案。
答案 0 :(得分:0)
对我来说,这看起来就像你正试图为一些你可以做得更优雅,正确,完全记录的方式的东西写一个黑客。请查看Magento API。
如果您想删除产品(或做其他事情):
http://www.magentocommerce.com/api/soap/catalog/catalogProduct/catalog_product.delete.html
您将得到适当的回复,以了解事情是否成功。如果API无法做到,那么你可以根据需要进行扩展/破解。
要开始使用,您需要一个API用户/通行证,并熟悉SOAP。 Magento文档中的示例应该足够了。祝你好运!