Http响应头和正文按预期不正确

时间:2013-05-22 07:52:22

标签: php http

我正在使用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);

2 个答案:

答案 0 :(得分:0)

你可能应该使用curl函数,并自己做BOTH请求。 file_get_contents,会为您做第二次请求,但却无法获取第二个标题。

答案 1 :(得分:0)

也许有点老了但是反正:

您正在使用get_headers() - 函数来获取标头。 documentation表示:

  

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

它并不同情此函数实际上会向服务器发送 new 请求并返回 请求的响应标头。因此,标题可能略有不同。

由于您使用file_get_contents()加载内容,因此您可以在请求后立即使用全局$http_response_header-variable ,其中包含来自最后一个的响应标头执行请求。