почему curl_exec не отправляет маркер авторизации на сервер?

#php #curl #php-curl

Вопрос:

Я пытаюсь отправить запрос GET на сервер python с маркером авторизации в заголовке.

Я действительно получаю запрос на стороне сервера, но без маркера авторизации

Вот php-код, который генерирует запрос :

 <?php

$url = "http://localhost:7432/f.php";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$headers = array(
 "Authorization: sdfascvthsgdgdssgvsgscf",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
//for debug only!
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$resp = curl_exec($curl);
curl_close($curl);
var_dump($resp);
?>
 

Когда я генерирую запрос из Reqbin, я получаю запрос с маркером авторизации в заголовке , но когда я пытаюсь сгенерировать запрос из файла php, он не отправляет маркер авторизации на сервер

Вот запрос, полученный на стороне сервера, когда я использую веб-сайт Reqbin для выполнения запроса:

 127.0.0.1 - - [03/Sep/2021 13:27:10] "GET /f.php HTTP/1.1" 200 -
Host: localhost:7432
Connection: keep-alive
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="92", "Opera";v="78"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159
Safari/537.36 OPR/78.0.4093.184
sec-ch-ua-mobile: ?0
Authorization: sdfascvthsgdgdssgvsgscf
Accept: */*
Sec-Fetch-Site: none
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: _ga=GA1.1.1359401486.1622671713
 

И это полученный запрос, когда я использую php-код, упомянутый выше :

  127.0.0.1 - - [03/Sep/2021 13:27:20] "GET /f.php HTTP/1.1" 200 - 
 Host: localhost:7432Connection: keep-alive Cache-Control: max-age=0
 sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="92", "Opera";v="78"
 sec-ch-ua-mobile: ?0 Upgrade-Insecure-Requests: 1 User-Agent:
 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,
 like Gecko) Chrome/92.0.4515.159 Safari/537.36 OPR/78.0.4093.184
 Accept:
 text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
 Sec-Fetch-Site: none Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1
 Sec-Fetch-Dest: document Accept-Encoding: gzip, deflate, br
 Accept-Language: en-US,en;q=0.9 Cookie:
 _ga=GA1.1.1359401486.1622671713
 

Что я делаю не так на стороне php ?

Комментарии:

1. Обычный формат для значения заголовка авторизации <type> <credentials> — вы действительно просто отправляете то, что показали?

2. @CBroe Да, я отправляю точно то же самое , что я опубликовал выше , на веб-сайте reqbin есть возможность отправлять различные типы токенов аутентификации, например , базовые , или с учетными данными для входа, и третий вариант-отправлять только пользовательский токен, я использовал пользовательский токен, и когда я отправляю его с помощью reqbin, все работает, но не когда я отправляю то же самое с php

3. Почему, что это должна быть за схема авторизации? Я предполагаю, что cURL, возможно, отфильтровывает это из-за «недопустимого» формата?

4. Не уверен , что это так , но сам php-код-это тот же код , который reqbin использует для отправки запроса, потому что это код, который reqbin сгенерировал для запроса, поэтому я просто скопировал точно такой же код

5. Итак, что происходит, когда вы пытаетесь отправить что-то вроде Authorization: Bearer sdfascvthsgdgdssgvsgscf вместо этого, попадает ли заголовок на сервер тогда?