URL を呼び出して PHP で結果を取得したいfile_get_contents
(CURL は知っているが、まず で試してみたいfile_get_contents
)。私の場合magento
、これはショップ システムへのリクエストであり、以前にバックエンドにログインする必要があります。
ブラウザで URL を手動で実行すると、正しいページが表示されます。でURLを送るとfile_get_contents
(リクエストにCookieを入れたので)ログインもできてしまうのですが、毎回ダッシュボードのホームサイトしか取得できず、何かの原因でリダイレクトされているのかもしれません。
ブラウザが送信するので、同じ http リクエストをシミュレートしようとしました。file_get_contents
私の質問は次のとおりです。同じヘッダー データ (Cookie、Session-ID など)を手動でシリアル化せずにパラメーターとして直接送信する可能性はありますか?
これは一般的な 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 Web サイトとしての完全なダッシュボード ホーム ページです。
このようなスクリプトを探しています。Cookie文字列やその他のパラメーターを手動で作成することなく、すべてのパラメーターが自動的に設定されるようにしたい:)
file_get_contents('http://example.com/submit.php', false, $_SESSION["Current_Header"]);
編集:間違いを見つけました。2 つの特別な get-Parameter (isAjax=1
およびform_key
= Mage::getSingleton('core/session', array('name' => 'adminhtml'))->getFormKey()
) が必要です。私の場合、form_key
エラーが発生します。しかし、見苦しい Cookie 文字列は既に存在します。より適切な解決策を探しています。