如何在PHP cURL请求中设置cookie

时间:2014-09-03 03:34:40

标签: php authentication curl cookies session-cookies

我正在尝试与加拿大的房地产列表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值以便我可以正确认证并提出后续请求的任何建议将不胜感激。
谢谢。

1 个答案:

答案 0 :(得分:0)

只是做:

curl_setopt($ch, CURLOPT_COOKIEJAR, '');

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