我正在使用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);
答案 0 :(得分:0)
你可能应该使用curl函数,并自己做BOTH请求。 file_get_contents,会为您做第二次请求,但却无法获取第二个标题。
答案 1 :(得分:0)
也许有点老了但是反正:
您正在使用get_headers()
- 函数来获取标头。 documentation表示:
获取服务器发送的所有标头,以响应 [new] HTTP请求
它并不同情此函数实际上会向服务器发送 new 请求并返回 请求的响应标头。因此,标题可能略有不同。
由于您使用file_get_contents()
加载内容,因此您可以在请求后立即使用全局$http_response_header
-variable ,其中包含来自最后一个的响应标头执行请求。