为了账号安全,请及时绑定邮箱和手机立即绑定

file_get_contents接收cookie

/ 猿问

file_get_contents接收cookie

PHP
烙印99 2019-11-19 15:15:21

进行file_get_contents请求时是否可以接收由远程服务器设置的cookie ?


我需要php来执行http请求,存储cookie,然后使用存储的cookie进行第二个http请求。


查看完整描述

3 回答

?
一只萌萌小番薯

您应该cURL为此目的使用cURL实现名为cookie jar的功能,该功能允许将cookie保存在文件中,并将其重新用于后续请求。


这里有一个简短的代码片段,介绍了如何实现:


/* STEP 1. let’s create a cookie file */

$ckfile = tempnam ("/tmp", "CURLCOOKIE");

/* STEP 2. visit the homepage to set the cookie properly */

$ch = curl_init ("http://somedomain.com/");

curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile); 

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);

$output = curl_exec ($ch);


/* STEP 3. visit cookiepage.php */

$ch = curl_init ("http://somedomain.com/cookiepage.php");

curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile); 

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);

$output = curl_exec ($ch);

注意:必须注意,您应该已安装pecl扩展名(或用PHP编译),否则您将无法访问cURL API。


查看完整回答
反对 回复 2019-11-19
?
繁花如伊

有一个神奇的变量,叫做$http_response_header;它是一个包含所有已接收标头的数组。要提取Cookie,您必须过滤出以开头的标题Set-Cookie:。


file_get_contents('http://example.org');


$cookies = array();

foreach ($http_response_header as $hdr) {

    if (preg_match('/^Set-Cookie:\s*([^;]+)/', $hdr, $matches)) {

        parse_str($matches[1], $tmp);

        $cookies += $tmp;

    }

}

print_r($cookies);

等效但不太神奇的方法是使用stream_get_meta_data():


if (false !== ($f = fopen('http://www.example.org', 'r'))) {

        $meta = stream_get_meta_data($f);

        $headers = $meta['wrapper_data'];


        $contents = stream_get_contents($f);

        fclose($f);

}

// $headers now contains the same array as $http_response_header


查看完整回答
反对 回复 2019-11-19
?
45度呼吸

我知道这很晚了,但是实际上有一种方法可以至少接收服务器发送的单个cookie。


我假设您知道如何处理整个stream_create_context业务,以使您的file_get_contents http请求滚动,并且您实际上需要设置cookie的帮助。


在网址上运行file_get_contents之后,设置了(不幸的是,非关联的)数组$ http_response_header。


如果服务器发回cookie,则其中之一将以“ Set-Cookie:”开头,您可以使用substr提取该cookie。


但是,目前看来,我只能通过此变量访问-one-Set-Cookie,这是我当前试图找到一种解决方法的限制。


分享编辑


查看完整回答
反对 回复 2019-11-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信