【发布时间】: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