亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP curl能否在單個請求中檢索響應頭和響應正文?

PHP curl能否在單個請求中檢索響應頭和響應正文?

PHP
MYYA 2019-06-25 13:39:25
PHP curl能否在單個請求中檢索響應頭和響應正文?是否有任何方法可以同時獲取使用PHP的cURL請求的頭和正文?我發現這個選擇:curl_setopt($ch, CURLOPT_HEADER, true);將返回主體加頭但我需要解析它才能得到身體。有什么方法可以讓兩者都更有用(更安全)嗎?注意,對于“單一請求”,我的意思是避免在GET/POST之前發出頭請求。
查看完整描述

3 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

提供的許多其他解決方案包括:做得對。

  • 劈開

    \r\n\r\n

    不可靠

    CURLOPT_FOLLOWLOCATION

    正在打開或何時服務器使用100代碼進行響應。
  • 并不是所有的服務器都符合標準,只傳輸一個

    \n

    換新的臺詞。
  • 通過

    CURLINFO_HEADER_SIZE

    也不總是可靠的,特別是在使用代理或在某些相同的重定向場景中使用代理時。

最正確的方法是CURLOPT_HEADERFUNCTION.

下面是使用PHP閉包執行此操作的非常干凈的方法。它還將所有標頭轉換為小寫,以便在服務器和HTTP版本之間進行一致的處理。

此版本將保留重復的標頭。

這符合RFC 822和RFC 2616的要求,請不要建議編輯使用mb_字符串函數,它是不正確的!

$ch = curl_init();$headers = [];curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// this function is called by curl for each header receivedcurl_setopt($ch, CURLOPT_HEADERFUNCTION,
  function($curl, $header) use (&$headers)
  {
    $len = strlen($header);
    $header = explode(':', $header, 2);
    if (count($header) < 2) // ignore invalid headers
      return $len;

    $name = strtolower(trim($header[0]));
    if (!array_key_exists($name, $headers))
      $headers[$name] = [trim($header[1])];
    else
      $headers[$name][] = trim($header[1]);

    return $len;
  });$data = curl_exec($ch);print_r($headers);


查看完整回答
反對 回復 2019-06-25
  • 3 回答
  • 0 關注
  • 964 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號