簡體   English   中英

未使用curl_setopt PHP設置標題

[英]Headers not being set using curl_setopt PHP

我正在使用curl_setopt在請求中設置標題。 具體來說,我想使其標頭包括正在使用的授權類型。

  // Define headers to use
  $header = array(
         'HTTP/1.1',
         'Content-type: text/plain',
         'Authorization: Basic ' . base64_encode("$username:$password")
  );

// Below I prepare the request

$ch = curl_init();

 curl_setopt($ch, CURLOPT_URL,$URL);
 curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds
 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
 curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);;
 curl_setopt($ch, CURLOPT_HTTPHEADER, $header); // set custom header
 curl_setopt($ch, CURLOPT_HEADER, true);
 curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");

 $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);   //get status code

 if (curl_errno($ch)) {
     echo 'CURL Error: ' . curl_error($ch);
 }

 $result=curl_exec ($ch);

 echo $result;

 curl_close ($ch);

我的用例正在運行tcpdump來分析標頭(通過找到字符串“ Authorization:Basic”,從而獲得username:password的base64編碼

因此,當該php程序將該請求發送到$ URL(通過加載該程序的頁面)時,TCP Dump應該檢測出uis發出的base64編碼,對嗎?

但是,tcpdump不會提取標頭,我認為這是因為我沒有正確設置標頭。

您需要執行curl請求。

$result = curl_exec($ch);

//remember to close the connection too
curl_close($ch).

如果不調用curl_exec() ,則永遠不會發送請求,因此curl_exec()不會發送標頭。

在我看來還可以。 但是,在使用CURLOPT_USERPWD時,您不需要Authorization標頭,因為它將覆蓋任何現有的Authorizations標頭。 在headers數組中。

一個建議是通過將curl請求發送到http://requestb.in來調試它。

設置HTTP標頭的方法是正確的。
你忘了打電話給curl_exec($ch); 畢竟呢?

您必須先運行curl_exec:

$result=curl_exec ($ch);

然后檢查狀態碼:

$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);   //get status code

if (curl_errno($ch)) {
    echo 'CURL Error: ' . curl_error($ch);
}

暫無
暫無

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

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