Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP cURL请求中设置cookie_Php_Authentication_Curl_Cookies_Session Cookies - Fatal编程技术网

如何在PHP cURL请求中设置cookie

如何在PHP cURL请求中设置cookie,php,authentication,curl,cookies,session-cookies,Php,Authentication,Curl,Cookies,Session Cookies,我正试图与加拿大的房地产挂牌API(CREA)建立联系,并根据: 成功的登录响应标头包含一个带有 X-SESSIONID值。此X-SessionID值需要与一起提交 登录后的每个请求 该服务提供了一个用于设置所有内容的示例API,但每当我尝试获取X-SESSIONID值并为后续请求设置它时,它似乎不起作用,并且我在所有后续请求上都会得到一个401 Unauthorized头(即使我能够成功获取X-SESSIONID信息) 以下是我现在使用的代码: <?php $ch = curl_i

我正试图与加拿大的房地产挂牌API(CREA)建立联系,并根据:

成功的登录响应标头包含一个带有 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>';
只要做:


现在curl将负责饼干。您不需要解析任何似乎不起作用的内容或手动设置它们。我想你是对的,我必须使用
CURLOPT_COOKIEJAR
,但我试着把这行代码放在不同的地方,但它不起作用。我是否还需要使用
CURLOPT_-COOKIEFILE
?你觉得CURLOPT_COOKIESESSION怎么样?还有,为什么第三个参数的字符串是空的?谢谢
curl_setopt($ch, CURLOPT_COOKIEJAR, '');