9

我有一个 PHP 应用程序需要从另一个网页中获取内容,而我正在阅读的网页需要一个 cookie。

我找到了有关如何在获得 cookie ( http://groups.google.com/group/comp.lang.php/msg/4f618114ab15ae2a ) 后进行此调用的信息,但是我不知道如何生成cookie,或保存 cookie 的方式/位置。

例如,要通过 wget 阅读此网页,我执行以下操作:

wget --quiet --save-cookies cookie.file --output-document=who.cares \ 
  http://remoteServer/login.php?user=xxx&pass=yyy

wget --quiet --load-cookies cookie.file --output-document=documentiwant.html \
  http://remoteServer/pageicareabout.html

...我的问题是如何在 PHP 中执行“--save-cookies”位,以便可以在后续 PHP stream_context_create / file_get_contents 块中使用 cookie:

$opts = array(http'=> array(
  'method'=> "GET",
  'header'=>
    "Accept-language: en\r\n" .
    "Cookie: **NoClueAtAll**\r\n"
  )
);

$context = stream_context_create($opts);
$documentiwant = file_get_contents("http://remoteServer/pageicareabout.html",
  0, $context);
4

2 回答 2

14

Shazam - 奏效了!太感谢了!万一其他人偶然发现了这个页面,这里需要详细说明:

  1. 安装 cURL(对我来说就像 ubuntu 中的 'sudo apt-get install php5-curl' 一样简单)
  2. 将之前列出的 PHP 更改为以下内容:

    <?php
    
    $cr = curl_init('http://remoteServer/login.php?user=xxx&pass=yyy');
    curl_setopt($cr, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($cr, CURLOPT_COOKIEJAR, 'cookie.txt');   
    $whoCares = curl_exec($cr); 
    curl_close($cr); 
    
    $cr = curl_init('http://remoteServer/pageicareabout.html');
    curl_setopt($cr, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($cr, CURLOPT_COOKIEFILE, 'cookie.txt'); 
    $documentiwant = curl_exec($cr);
    curl_close($cr);
    
    ?>
    

以上代码片段深受http://www.weberdev.com/get_example-4555.html的影响。

于 2008-10-29T16:27:40.097 回答
5

使用cURL可能会更好。使用curl_setopt设置 cookie 处理选项。

如果这只是一次性的事情,您可以使用带有Live HTTP标头的 Firefox来获取标头,然后将其粘贴到您的 PHP 代码中。

于 2008-10-29T14:47:42.607 回答