0

我正在使用 PHP 进行代理。在我的 php 代码中,我发送了正确的必需标头,并希望获得响应正文和标头。但是,我得到了我想要的正确响应正文,但没有正确获取标题(应该得到状态 200 但得到 401)。当我使用 Firefox 进行跟踪时,我发现 SAP URL 本身通过使用我发送的数据在内部发出 2 个请求。因此,对于我的第一个请求,它没有经过身份验证,因此 SAP url itslef 再次发送相同的请求,第二次它提供了带有标题的正确响应正文。然而,当我得到它时,我使用 php 代码从第二个响应中获取响应体,从第一个响应中获取标头。这是代码。

    $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);
4

2 回答 2

0

也许有点旧,但无论如何:

您正在使用get_headers()-function 来获取标题。它的文档指出:

获取服务器为响应[new] HTTP 请求而发送的所有标头

它并不理解这个函数实际上会向服务器发送一个请求并返回该请求的响应。因此,标题可能会略有不同。

由于您使用file_get_contents()的是加载内容,因此您可以在请求之后立即使用全局$http_response_header变量 ,该变量将包含上次执行请求的响应标头。

于 2013-07-22T09:41:26.127 回答
0

您可能应该改用 curl 函数并自己执行 BOTH 请求。file_get_contents,为您执行第二个请求,但消除了获取第二个标头的可能性。

于 2013-05-22T07:58:15.663 回答