Форумы портала PHP.SU » » HTTP и PHP » file_get_contents, Заголовки при редиректе. Баг или фича?

Страниц (1): [1]
 

1. Heggi - 29 Октября, 2017 - 21:23:11 - перейти к сообщению
Вот такой незамысловатый код:

PHP:
скопировать код в буфер обмена
  1. $responseContent = file_get_contents('https://esi.tech.ccp.is/latest/universe/regions');
  2. $responseHeaders = $http_response_header;
  3. var_dump($responseHeaders);
  4.  


Проблема в том, что указанный URL вызывает редирект на https://esi[dot]tech[dot]ccp[dot]is/latest/universe/regions/ (со слешем в конце)

А в $responseHeaders получаем объединение заголовков двух ответов:

PHP:
скопировать код в буфер обмена
  1. array(27) {
  2.   [0]=>
  3.   string(30) "HTTP/1.0 301 Moved Permanently"
  4.   [1]=>
  5.   string(35) "Location: /latest/universe/regions/"
  6.   [2]=>
  7.   string(35) "Date: Sun, 29 Oct 2017 19:11:32 GMT"
  8.   [3]=>
  9.   string(18) "Content-Length: 60"
  10.   [4]=>
  11.   string(38) "Content-Type: text/html; charset=utf-8"
  12.   [5]=>
  13.   string(15) "Via: 1.1 google"
  14.   [6]=>
  15.   string(14) "Alt-Svc: clear"
  16.   [7]=>
  17.   string(15) "HTTP/1.0 200 OK"
  18.   [8]=>
  19.   string(38) "Access-Control-Allow-Credentials: true"
  20.   [9]=>
  21.   string(69) "Access-Control-Allow-Headers: Content-Type,Authorization,X-User-Agent"
  22.   [10]=>
  23.   string(41) "Access-Control-Allow-Methods: GET,OPTIONS"
  24.   [11]=>
  25.   string(30) "Access-Control-Allow-Origin: *"
  26.   [12]=>
  27.   string(51) "Access-Control-Expose-Headers: Content-Type,Warning"
  28.   [13]=>
  29.   string(27) "Access-Control-Max-Age: 600"
  30.   [14]=>
  31.   string(19) "Content-Length: 901"
  32.   [15]=>
  33.   string(30) "Content-Type: application/json"
  34.   [16]=>
  35.   string(35) "Date: Sun, 29 Oct 2017 12:20:10 GMT"
  36.   [17]=>
  37.   string(42) "ETag: W/"8c76d9724a0581bb6c256c807fd0649f""
  38.   [18]=>
  39.   string(38) "Expires: Mon, 30 Oct 2017 11:05:00 GMT"
  40.   [19]=>
  41.   string(44) "Last-Modified: Sun, 29 Oct 2017 11:14:24 GMT"
  42.   [20]=>
  43.   string(43) "Strict-Transport-Security: max-age=31536000"
  44.   [21]=>
  45.   string(29) "X-Esi-Error-Limit-Remain: 100"
  46.   [22]=>
  47.   string(27) "X-Esi-Error-Limit-Reset: 50"
  48.   [23]=>
  49.   string(15) "Via: 1.1 google"
  50.   [24]=>
  51.   string(21) "Cache-Control: public"
  52.   [25]=>
  53.   string(10) "Age: 24682"
  54.   [26]=>
  55.   string(14) "Alt-Svc: clear"
  56. }


Видно, что первые 7 элементов - заголовок первого ответа, дальше элементы - заголовок второго ответа.
Тестил на 5.6.31 и PHP 7.0.23

Главный вопрос - это фича или баг? Если фича - то как разделять заголовки (какой заголовок к какому запросу относится, а если редиректов 5 будет?)
В документации на эту тему ничего не нашел, гугл тоже молчит (или я не умею спрашивать)

P.S. я конечно URL вызова поправил, но в Yii2 httpClient при определении типа контента берет первый заголовок "Content-Type" и в данном случае ничего не работает :)
2. Sail - 29 Октября, 2017 - 21:44:18 - перейти к сообщению
Heggi, не баг и не фича. Обычное дело Улыбка
You need only a HEAD request and then to parse the headers and return the last status code[dot]

 

Powered by ExBB FM 1.0 RC1