0

file_get_contents()ユーザーがワードプレス サイトにログインしていることを示すために、Wordpress によって設定されたクライアントの Cookie を使用して API エンドポイントに送信する必要があります。stream_context_create()おおよそ次のように使用する必要があることはわかっています。

$cookies = ??? //THIS IS THE QUESTION (see answer below)!

// Create a stream
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: {$cookies}\r\n"
  )
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents('http://example.dev/api/autho/', false, $context);

最初の行のコメントからわかるように、正しい Cookie が送信されるように、このリクエストを送信する方法に行き詰まっています。正しい Cookie が送信されていることはわかっています。印刷し$_COOKIESて表示できるからです。しかし、同じ配列をヘッダーに挿入しようとしても、うまくいきません。

前もって感謝します!

ps:これを使用する必要があることを読みましたがcURL、理由がわからず、使用方法もわかりません...しかし、私はその考えを受け入れています。

更新:これを機能させました。これは基本的に私が行っていたのと同じことですが、別の重要な cookie があります。以下の私の答えを見てください。

4

4 に答える 4

1

私はそれを正しく行っていたことがわかりましたが、リクエストが正しく機能するためにWPが2番目のCookieを送信する必要があることを知りませんでした.

これが私のために働くコードです:

$cookies = $_COOKIE;
$name;
$value;
foreach ($_COOKIE as $key => $cookie ) {
    if ( strpos( $key, 'wordpress_logged_in') !== FALSE ) {
        $name = $key;
        $value = $cookie;
    } 
}

// Create a stream
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: {$key}={$cookie}; wordpress_test_cookie=WP Cookie check \r\n"
  )
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents('http://mydomain.dev/api/autho/', false, $context);

var_dump($file);

基本的には私の質問で見たものと同じですが、重要な追加があります: wordpress_test_cookie=WP Cookie check. 私はそれがどこにも文書化されているのを見たことがありませんが、ログインしたユーザーとして呼び出しを行うには、WP がこの Cookie と実際の wordpress_logged_in Cookie を必要とします。

于 2012-08-01T01:09:48.207 に答える
1

Cookie は次の形式にする必要があります: Cookie: cookieone=value; cookietwo=value、つまり、セミコロンとスペースで区切り、末尾にセミコロンを付けません。Cookie 配列をループし、その形式を出力して送信します。

于 2012-07-31T19:37:44.247 に答える
0

さて、あなたが使用する必要があると言ったようにcURL(部分的には私の個人的な意見ですが、URLファイルラッパーを禁止するサーバー構成でいくつかの悪い経験があります)。

マニュアルからの引用:

fopen ラッパーが有効になっている場合は、この関数で URL をファイル名として使用できます。

そのため、コードが機能しないことがあります。一方cURL、リモート コンテンツの取得用に設計されており、何が起こっているか、データを取得する方法などについて多くの制御を提供します。

を見てみると、curl_setopt設定できる項目の数と詳細がわかります (ただし、設定する必要はありません。必要な場合はオプションです)。

これは、グーグル検索後の最初のリンクphp curl set cookiesです。これは、開始するのに最適な場所です...基本的な例はまったく簡単です。

于 2012-07-31T19:49:57.933 に答える