2

PHP 5.2.17 を使用してリモート ページを取得しています。HTTP 要求にはいくつかの Cookie 値が含まれていますが、Cookie は宛先ページに配信されません。

$url = 'http://somesite.com/';
$opts = array(
    'http' => array
        (
        'header' => array("Cookie: field1=value1; field2=value2\r\n")
    )
);
$context = stream_context_create($opts);
echo file_get_contents($url, false, $context);

問題を見つけるのを手伝ってもらえますか? 注: curl は使用できません。ありがとう。

4

3 に答える 3

0
$url = 'http://somesite.com/';
$opts = array(
    'http' => array
    (
        'header' => "Cookie: field1=value1; field2=value2\r\n"
    )
);
$context = stream_context_create($opts);
file_get_contents($url, false, $context);
于 2012-07-07T05:03:35.360 に答える
0

受信コードは正しく動作していますか?

単純にエコーする受信ページであなたの例を動作させることができます:

<?php
echo $_COOKIE['field1'] . '::' . $_COOKIE['field2']; // returns value1::value2
?>

または、サイトがユーザー エージェント (何でも) を要求している可能性があります。ウィキペディアに到達する前に、この問題が発生しました (すべての Mediawiki ソフトウェアによって制限されているわけではありません。明らかにウィキメディア サイトのみ)。「http」配列内の user_agent プロパティを任意の値に設定します。(ただし、たまたま Wikipedia にアクセスしようとしている場合は、代わりに api.php を試すことができます: http://en.wikipedia.org/w/api.php ; 別の Mediawiki サイトの場合は、同じ相対パスを使用してください)

于 2012-07-07T03:32:05.510 に答える
0

allow_url_fopen有効になっていない可能性があります。値を ini_get: で確認してくださいini_get('allow_url_fopen')

一般にアクセス可能であることがわかっている古いページで file_get_contents() を呼び出して、健全性チェックを行うこともできます。

それ以外は、サンプルコードは問題なく見えます。

2 番目のオプション、ソケット接続:

<?php
$fp = fsockopen("somesite.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: somesite.com\r\n";
    $out .= "Cookie: field1=value1; field2=value2; path=/; domain=somesite.com;\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
echo PHP_EOL;
于 2012-07-07T03:31:05.573 に答える