如何使用CURL和标题位置连接到远程站点

时间:2018-01-13 15:31:25

标签: php curl cookies session-cookies

我在站点B上从站点A到CURL进行日志记录,我从连接中获取cookie并写入名为cookie.txt的文件。

但是当我传递cookie数据以进行最终标题重定向时('位置:http://examplesiteb.com'),它会返回断开连接。

我用于连接的代码与其他帖子中的代码相同,但是我的修改遵循@ramrider用户的建议,我建议在标题中传递cookie,但我不是确定如何做到这一点。

Transfer cookies & session from CURL to header location

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_COOKIESESSION, true);
  curl_setopt($ch, CURLOPT_HEADER, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  curl_setopt($ch, CURLOPT_FRESH_CONNECT, 10);
  curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');

  // Download the given URL, and return output
  $output = curl_exec($ch);

  // Cookie Match
  preg_match_all('/^Set-Cookie:\s*([^\r\n]*)/mi', $output, $ms);

  $cookies = array();
  foreach ($ms[1] as $m) {
    list($name, $value) = explode('=', $m, 2);
    $cookies[$name] = $value;

    header('Set-Cookie: '.rawurlencode($name).'='.rawurlencode($value));
  }

  //print_r($cookies);

  $redirect = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

  header("Location: $redirect");

  //Close Match
  curl_close($ch);

重定向发生但未保持登录状态。

示例cookie文件

下面
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

#HttpOnly_example.com   FALSE   /   FALSE   0   ASP.NET_SessionId   10gtonkebkteuazx24sajlh2
#HttpOnly_example.com   FALSE   /   TRUE    1515800212  DTE 898EC9C0EF0BA3985E402046547931EAA55808E14A2DE469F11F6F6C0CF9A28871C8704BE794885CDF7D3EE1E8B06698166F86C184C5B53FE61FA53CA13682C562E17BCB7B2FA16D7A7180E6EA973735

用户@ martijn-pieters和@ waqas-bukhary,如果他们可以帮助我,谢谢你,因为你在其他帖子中删除了我的答案,而我正在完成其他人的其他信息,我找不到解决方案。< / p>

由于

1 个答案:

答案 0 :(得分:0)

Cookie与发送它们的域绑定。您无法为其他域设置Cookie。

如果“网站B”(您使用cURL登录“网站A”的地方)为example.com,“网站A”为not-example.com,则{{1}设置的Cookie }适用于Set-Cookie,不适用于example.com

没有为您自己的域设置Cookie的机制。

参见RFC 6265第5.3节(存储模型)第6部分:

  

如果domain-attribute为非空:

     
      
  • 如果规范化的请求主机与域属性没有域匹配:

  •   
    •   
    • 完全忽略cookie并中止这些步骤。
    •   
  •   

这实际上表示如果站点A尝试为站点B设置cookie,浏览器必须忽略cookie。