我使用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。
感谢。
答案 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);