2013-05-22 8 views
0

Я работаю над прокси с PHP. В моем php-коде я отправляю необходимые заголовки и ожидаю получить тело ответа и заголовки. Однако я получаю тело ответа правильно, как хочу, но не получаю заголовки должным образом (должен получить статус 200, но получить 401). Когда я отслеживал с помощью firefox, я обнаружил, что сам URL-адрес SAP делает запрос 2 внутренне, используя данные, которые я отправляю. поэтому с моим первым запросом он не аутентифицирован, поэтому SAP url itslef managementing отправляет один и тот же запрос снова, а второй раз он дает как правильное тело ответа с заголовками. Howevber I php code, когда я его получаю, получаю тело ответа от второго ответа и заголовков от 1-го ответа. здесь код.Заголовок и тело ответа Http не корректно, как ожидалось

$opts = array( 
     'http'=>array( 
      'method'=>"POST", 
     'content' => $xml_request, 
      'header'=>array("Host:" . $sap_url,                            
      "Content-Type: text/xml; charset=UTF-8",                  
      $authstring,$xml_request) 
      ) 
    ); 

    $context = stream_context_create($opts); 
$result = file_get_contents($sap_url, false, $context); 


$http_res_array = get_headers($sap_url); 
+0

Итак, как мне получить заголовки ответов со второго запроса? – user1806296

+0

вы отвечаете здесь - http://stackoverflow.com/questions/1336262/file-get-contents-behind-a-proxy –

ответ

0

Вместо этого вы должны использовать функции завитушки и выполнять ОБОИХ запросов самостоятельно. file_get_contents, выполняет второй запрос для вас, но убирает возможность извлекать второй заголовок.

0

Может быть, немного старый, но в любом случае:

Вы используете get_headers() -функции, чтобы получить заголовки. Это documentation гласит, что:

Извлекает все заголовки, посланные сервером в ответ на запрос [новый] HTTP

Это не сопереживать, что эта функция будет фактически отправить новый запросить сервер и вернуть ответ-заголовок для , что запрос. Поэтому заголовки могут быть немного разными.

Поскольку вы используете file_get_contents() для загрузки содержимого, вы можете использовать глобальный $http_response_header-variableсразу после вашего запроса, который будет содержать заголовок ответа от последнего выполненного запроса.

Смежные вопросы