如何将HTTP标头发送到PHP中包含的页面?

时间:2011-03-28 10:44:42

标签: php include http-headers

我需要在php中包含一些URL .. 我使用了以下代码:

<? include 'http://my_server.com/some_page.jsp?test=true'; ?>

问题在于,页面some_page.jsp根据请求标头user-agent采取不同的行为,该标头似乎不是由上述包含声明发送的...

那么我如何强制浏览器将请求标题也发送到包含的页面?

感谢。

4 个答案:

答案 0 :(得分:2)

这是一个糟糕的模式,如果它在你自己的服务器上,你应该只通过相对路径(为什么调用HTTP)包含它,如果不是,你基本上把钥匙交给你的网站到另一个域。

要请求具有其他用户代理的其他文档,请尝试使用cURL库。

请勿继续,仅供参考......

如果您必须运行生成的PHP代码(我强烈建议您不要,最重要的是为什么?),那么您可以eval()响应。

更新

您需要allow_url_include开启包含网址,默认情况下处于关闭状态。如果启用它,则可以使用user_agent选项设置用户代理。

如果您这样做是为了加入phpjsp网站,您应该尝试坚持仅在它们之间发送数据,而不是将其他代码发送到通过HTTP运行。

答案 1 :(得分:0)

声明:

<? include 'http://my_server.com/some_page.jsp?test=true'; ?>

不会按预期行事。

签出:HttpClient

http://scripts.incutio.com/httpclient/

有用户手册和示例

答案 2 :(得分:0)

您无法设置所有已发送的HTTP标头,但您可以设置发送的用户代理字符串,如下所示:

<? 

ini_set("user_agent", $_SERVER["HTTP_USER_AGENT"]);
include 'http://my_server.com/some_page.jsp?test=true'; 

?>

默认情况下,user_agent值为NULL,这就是您当前未看到任何内容被发送的原因。

这应该可以解决问题。请注意,如果.jsp文件返回html内容而不是php,则应使用readfile,而不是include

答案 3 :(得分:0)

我强烈建议您不要在现场环境中使用您的代码。相反,请使用Client-URL

例如,您可以这样做:

$ch = curl_init();
// the website
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/path/to/webpage');
// this line sets up curl so the website contents will be returned
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// the user agent, for example firefox
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5');
$html = curl_exec($ch);

如果您之后绝对需要执行代码,那么您可以执行大量检查并eval(),但前提是必须这样做。一种更好的方法是某种字典。