使用curl保存在stream_get_contents

时间:2018-11-07 18:51:55

标签: php curl file-get-contents

我想发送POST请求,实际上curl比stream_get_contents慢100毫秒,所以我想使用后者。

我有一个由curl保存的cookie.txt,如何将其用于下面的stream_get_contents函数。

function poster($url, $data, $optional_headers = null)
{
  $params = array('http' => array(
              'method' => 'POST',
              'content' => $data
            ));
  if ($optional_headers !== null) {
    $params['http']['header'] = $optional_headers;
  }
  $ctx = stream_context_create($params);
  $fp = @fopen($url, 'rb', false, $ctx);
  if (!$fp) {
    throw new Exception("Problem with $url, $php_errormsg");
  }
  $response = @stream_get_contents($fp);
  if ($response === false) {
    throw new Exception("Problem reading data from $url, $php_errormsg");
  }
return $response;
}

curl存储的我的cookie.txt如下所示

secure.domain.com   FALSE   /   FALSE   0   InterSecure AyDzUp5AEKz0ErJYeJF2221lIA$$
#HttpOnly_secure.domain.com FALSE   /   TRUE    0   ASP.NET_SessionId   eqyrgo545czouimlnqc223f0qyi

我尝试了

 $header = array(
    'Referer: https://secure.domain.com/IDirectTrading/customer/login.aspx',
    'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.20 Safari/537.36',
    'Cookie :   InterSecure = AyDzUp5AEKz0ErJYeJF2221lIA$$;ASP.NET_SessionId = eqyrgo545czouimlnqc223f0qyi'
 );
$CE = poster("https://secure.domain.com/Handler.ashx",$str,$header);

但是cookie似乎不起作用,有什么方法可以将cookie文本文件解析为数组并将其用于标题吗?

1 个答案:

答案 0 :(得分:2)

根据RFC 6265

  

通过处理每个将cookie列表序列化为cookie字符串   cookie列表中的cookie顺序:

     
      
  1. 输出cookie的名称,%x3D(“ =”)字符和cookie的值。

  2.   
  3. 如果cookie列表中有未处理的cookie,则输出字符%x3B和%x20(“;”)。

  4.   

换句话说,等号周围没有空格,每个cookie应该用分号和空格分隔:

$header = [
    'Cookie: InterSecure=AyDzUp5AEKz0ErJYeJF2221lIA$$; ASP.NET_SessionId=eqyrgo545czouimlnqc223f0qyi',
];