簡體   English   中英

如何在PHP cURL請求中設置cookie

[英]How to set cookie in PHP cURL request

我正在嘗試與加拿大的房地產列表API(CREA)建立連接,並且根據文檔說明

成功的登錄響應標頭包括帶有X-SESSIONID值的Set-Cookie。 登錄后,此X-SessionID值需要與每個請求一起提交。

該服務提供了用於設置所有內容的示例API,但是每當我嘗試獲取X-SESSIONID值並將其設置為后續請求時,它似乎都無法正常工作,並且我在所有后續請求中都獲得401未經授權的標頭(即使我能夠成功獲取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值的建議,都可以使我得到正確的身份驗證並提出后續請求。
謝謝。

做就是了:

curl_setopt($ch, CURLOPT_COOKIEJAR, '');

現在,curl將處理cookie。 您無需解析任何內容或手動設置它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM