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

也许allow_url_fopen未启用,检查值 w/ ini_get: ini_get('allow_url_fopen');

您还可以通过在您知道可公开访问的任何旧页面上调用 file_get_contents() 来进行完整性检查。

除此之外,您的示例代码看起来还不错。

第二种选择,套接字连接:

<?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 回答
0

您确定接收代码正常工作吗?

我可以让您的示例与接收页面一起简单地回显:

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

或者,该站点可能需要用户代理(任何东西)。我在访问 Wikipedia 之前遇到了这个问题(不受所有 Mediawiki 软件的限制;显然仅适用于 Wikimedia 网站)。将“http”数组中的 user_agent 属性设置为您想要的任何值。(但是,如果您碰巧尝试访问 Wikipedia,则可以尝试使用他们的 api.php:http ://en.wikipedia.org/w/api.php ;如果是另一个 Mediawiki 站点,请使用相同的相对路径)

于 2012-07-07T03:32:05.510 回答