服务器不发送自定义标头值

时间:2012-07-07 03:12:10

标签: php http-headers

我使用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。 感谢。

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

我可以让您的示例使用接收页面简单地回显:

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

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

答案 2 :(得分: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);