curl — заголовки не устанавливаются с помощью curl_setopt переполнения стека

Я использую 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 не принимает заголовок, и я думаю, что это потому, что я неправильно устанавливаю заголовки.

1

Решение

Вам необходимо выполнить запрос curl.

$result = curl_exec($ch);

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

Если вы не звоните curl_exec(), Вы никогда не отправляете запрос и, следовательно, никогда не отправляете заголовки.

1

Другие решения

Выглядит хорошо для меня. Однако вам не нужен заголовок Authorization при использовании CURLOPT_USERPWD, так как он переопределит любые существующие заголовки Authorizations. в массиве заголовков.

Предлагаем отладить ваш запрос curl, отправив его http://requestb.in.

1

То, как вы устанавливаете HTTP-заголовки, правильно.
Вы забыли позвонить curl_exec($ch); после всего этого?

0

сначала вы должны запустить 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);
}
0
По вопросам рекламы [email protected]