2

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 文字列は既に存在します。より適切な解決策を探しています。

4

1 に答える 1

0

私には、これは、よりエレガントに、適切で完全に文書化された方法で行うことができる何かのハックを書こうとしているように見えます。Magento API をご覧ください。

商品を削除したい場合 (または他のことをしたい場合):

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

物事が成功したかどうかを知るために、適切な応答が返されます。API でできないことがあれば、必要に応じて拡張/ハックできます。

開始するには、API ユーザー/パスが必要であり、SOAP に慣れる必要があります。Magento ドキュメントの例で十分です。幸運を!

于 2014-04-28T08:44:03.453 に答える