Настройка заголовков клиентов в CURL с использованием php не работает

<?php 
$curl = curl_init (); 
$headers = array ( 
    "Content-Type: application/json", 
    "ulogin : abc",           
    "Authorization : abcdefgh"
); 
curl_setopt ( $curl, CURLOPT_HTTPHEADER, $headers );
curl_setopt ( $curl, CURLOPT_URL, "http://localhost:8080/api/orders/209");
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );

$result = curl_exec ( $curl );

if ($result === false) {
   die ( 'Error fetching data: ' . curl_error ( $curl ) );
} else {
   var_dump ( $result );
}
curl_close ( $result );

?>

URL - это Java-сервис API для отдыха. Этот GET-запрос при получении на стороне службы показывает все значения заголовка null. Я проверил сервис с почтальоном с установленными заголовками, и он проходит. Не уверен, что мне не хватает в коде php.

фрагмент кода из моего сервиса:

public void doFilter(ServletRequest req, ServletResponse res,
        FilterChain chain) throws IOException, ServletException {
    final HttpServletRequest httpRequest = (HttpServletRequest) req;
        String token = httpRequest.getHeader("Authorization");
        String userEmail = httpRequest.getHeader("ulogin");
}

ОБНОВИТЬ
Я тестировал с почтальоном и образцом Java-клиента. Обе работы. Только из php не работает.

     public static void main(String[] args) throws ClientProtocolException, IOException {
      HttpClient client = new DefaultHttpClient();
      HttpGet request = new HttpGet("http://localhost:8080/api/order/165");
      request.addHeader("Content-Type", "application/json");
      request.addHeader("ulogin", "abc");         r 
      request.addHeader("Authorization", "abcdefg");
      HttpResponse response = client.execute(request);
      BufferedReader rd = new BufferedReader (new InputStreamReader(response.getEntity().getContent()));
      System.out.println( response.getHeaders("Authorization"));

     }      

UPDATE2

Использование get_file_contents также работает

  $url = "http://localhost:8080/api/order/165";

  $options = array(
 'http'=>array(
 'method'=>"GET",
 'header'=>"Content-Type: application/json\r\n" .
          "ulogin: abc\r\n" .     
          "Authorization:abcdefg\r\n"       
  )
  );

  $context = stream_context_create($options);
  $file = file_get_contents($url, false, $context);
  var_dump($file);

2 ответа

Нет ничего плохого в том, как вы устанавливаете заголовки в php.

Когда вы вызываете скрипт php, который показывает заголовки, которые были запрошены, он показывает 3 заголовка, которые вы установили. Вставьте следующий код в новый файл php и вызовите его с вашим текущим кодом. Вы увидите, что это прекрасно работает.

var_dump(getallheaders());

Одна небольшая заметка в curl_close позволяет добавить обработчик скручивания, а не ваш проанализированный результат. Измените следующую строку

curl_close ( $result );

к

curl_close( $curl );

Я не уверен, но если вы хотите включить заголовки, есть вариант

CURLOPT_HEADER  TRUE to include the header in the output.

Php.net CURL

Другие вопросы по тегам