Я использую 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» и получая, таким образом, base64-кодировку username: password)
Таким образом, когда эта php-программа отправляет этот запрос на $ URL (путем загрузки страницы этой программы), TCP Dump должен обнаружить кодировку base64, которую отправляет пользователь, верно?
Тем не менее, tcpdump не принимает заголовок, и я думаю, что это потому, что я неправильно устанавливаю заголовки.
Вам необходимо выполнить запрос curl.
$result = curl_exec($ch);
//remember to close the connection too
curl_close($ch).
Если вы не звоните curl_exec()
, Вы никогда не отправляете запрос и, следовательно, никогда не отправляете заголовки.
Выглядит хорошо для меня. Однако вам не нужен заголовок Authorization при использовании CURLOPT_USERPWD, так как он переопределит любые существующие заголовки Authorizations. в массиве заголовков.
Предлагаем отладить ваш запрос 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);
}