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

请问如何将php curl中的cookie转换为变量

请问如何将php curl中的cookie转换为变量

PHP
鸿蒙传说 2019-08-03 07:03:37
如何将php curl中的cookie转换为变量因此,其他公司的一些人认为,如果他不使用SOAP、XMLRPC或REST或任何其他合理的通信协议,而是将所有的响应作为cookie嵌入到报头中,那就太棒了。我需要把这些cookie作为希望从这个卷曲响应数组。如果我不得不为此浪费我的一生,写一个解析器,我会非常不高兴。有没有人知道如何简单地做到这一点,最好不要将任何东西写入文件?如果有人能帮我解决这个问题,我将非常感激。
查看完整描述

3 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

虽然这个问题很老,并且接受的响应是有效的,但我发现它有点不适应,因为HTTP响应的内容(HTML、XML、JSON、二进制或其他什么)会与标头混合。

我找到了另一种选择。curl提供了一个选项(CURLOPT_HEADERFUNCTION)来设置将为每个响应头行调用的回调。该函数将接收curl对象和带有标头行的字符串。

您可以使用这样的代码(改编自TML响应):

$cookies = Array();$ch = curl_init(' 
// Ask for the callback.curl_setopt($ch, CURLOPT_HEADERFUNCTION, "curlResponseHeaderCallback");
$result = curl_exec($ch);var_dump($cookies);function curlResponseHeaderCallback($ch, $headerLine) {
    global $cookies;
    if (preg_match('/^Set-Cookie:\s*([^;]*)/mi', $headerLine, $cookie) == 1)
        $cookies[] = $cookie;
    return strlen($headerLine); // Needed by curl}

这个解决方案的缺点是使用全局变量,但我想这不是短脚本的问题。如果curl被包装到类中,则始终可以使用静态方法和属性。




查看完整回答
反对 回复 2019-08-04
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

这样做时不需要regexp,但需要PECL HTTP扩展.

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 1);
$result = curl_exec($ch);curl_close($ch);$headers = http_parse_headers($result);
$cookobjs = Array();foreach($headers AS $k => $v){
    if (strtolower($k)=="set-cookie"){
        foreach($v AS $k2 => $v2){
            $cookobjs[] = http_parse_cookie($v2);
        }
    }}$cookies = Array();foreach($cookobjs AS $row){
    $cookies[] = $row->cookies;}$tmp = Array();// sort k=>v formatforeach($cookies AS $v){
    foreach ($v  AS $k1 => $v1){
        $tmp[$k1]=$v1;
    }}$cookies = $tmp;print_r($cookies);




查看完整回答
反对 回复 2019-08-04
  • 3 回答
  • 0 关注
  • 340 浏览

添加回答

举报

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