【问题标题】:How to set cookie in PHP cURL request如何在 PHP cURL 请求中设置 cookie
【发布时间】:2014-10-27 10:51:09
【问题描述】:

我正在尝试与加拿大的房地产列表 API (CREA) 建立连接,并根据documentation

成功的登录响应标头包括一个 Set-Cookie X-SESSIONID 值。此 X-SessionID 值需要提交 登录后的每个请求。

该服务提供了一个示例 API 用于设置所有内容,但每当我尝试获取 X-SESSIONID 值并将其设置为后续请求时,它似乎不起作用,并且我得到一个 401 Unauthorized 标头后续请求(即使我能够成功获取 X-SessionID 信息)。

这是我现在使用的代码:

<?php

  $ch = curl_init('http://sample.data.crea.ca/Login.svc/Login');

  curl_setopt($ch, CURLOPT_HEADER, true);
  curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_USERPWD, 'CXLHfDVrziCfvwgCuL8nUahC:mFqMsCSPdnb5WO1gpEEtDCHH');

  $xml = curl_exec($ch);
  curl_close($ch);

  echo '<pre>' . htmlspecialchars($xml) . '</pre>';

  preg_match('|Set-Cookie: (X-SESSIONID=.*?);.*|', $xml, $match);

  echo '<pre>';
  print_r($match);
  echo '</pre>';

  $ch = curl_init('http://sample.data.crea.ca/Metadata.svc/GetMetadata?Type=METADATA-RESOURCE&Format=STANDARD-XML&ID=0');

  curl_setopt($ch, CURLOPT_COOKIE, $match[1]);
  curl_setopt($ch, CURLOPT_HEADER, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  $xml = curl_exec($ch);
  curl_close($ch);

  echo '<pre>' . htmlspecialchars($xml) . '</pre>';

因为这是一个任何人都可以免费使用的示例 API,所以您可以按原样运行上面的代码以查看我遇到的错误。

任何关于如何正确提交 X-SessionID 值以便我可以正确验证并发出后续请求的建议将不胜感激。
谢谢。

【问题讨论】:

    标签: php authentication curl cookies session-cookies


    【解决方案1】:

    只要做:

    curl_setopt($ch, CURLOPT_COOKIEJAR, '');
    

    现在 curl 将处理 cookie。您无需解析任何内容或手动设置它们

    【讨论】:

    • 这似乎不起作用。我认为你是对的,我必须使用CURLOPT_COOKIEJAR,但我尝试将那行代码放在不同的地方,但它不起作用。我还需要使用CURLOPT_COOKIEFILE吗? CURLOPT_COOKIESESSION 呢?另外,为什么第三个参数是空字符串?谢谢。
    猜你喜欢
    • 2013-06-13
    • 2015-03-22
    • 1970-01-01
    • 2014-12-09
    • 2012-10-13
    • 2015-03-13
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多