[英]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.