<?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);
Я не уверен, но если вы хотите включить заголовки, есть вариант
CURLOPT_HEADER TRUE to include the header in the output.
Нет ничего плохого в том, как вы устанавливаете заголовки в php.
Когда вы вызываете скрипт php, который показывает заголовки, которые были запрошены, он показывает 3 заголовка, которые вы установили. Вставьте следующий код в новый файл php и вызовите его с вашим текущим кодом. Вы увидите, что это прекрасно работает.
var_dump(getallheaders());
Одна небольшая заметка в curl_close позволяет добавить обработчик скручивания, а не ваш проанализированный результат. Измените следующую строку
curl_close ( $result );
к
curl_close( $curl );