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


server not sending custom header values

我正在使用 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);

你能帮我找到问题吗?注意:我不能使用卷曲。谢谢。

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

我可以让你的例子与接收页面一起工作,只是回显:

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

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

也许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;
$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);