我需要在php中包含一些URL .. 我使用了以下代码:
<? include 'http://my_server.com/some_page.jsp?test=true'; ?>
问题在于,页面some_page.jsp
根据请求标头user-agent
采取不同的行为,该标头似乎不是由上述包含声明发送的...
那么我如何强制浏览器将请求标题也发送到包含的页面?
感谢。
答案 0 :(得分:2)
这是一个糟糕的模式,如果它在你自己的服务器上,你应该只通过相对路径(为什么调用HTTP)包含它,如果不是,你基本上把钥匙交给你的网站到另一个域。
要请求具有其他用户代理的其他文档,请尝试使用cURL库。
请勿继续,仅供参考......
如果您必须运行生成的PHP代码(我强烈建议您不要,最重要的是为什么?),那么您可以eval()
响应。
您需要allow_url_include
开启包含网址,默认情况下处于关闭状态。如果启用它,则可以使用user_agent
选项设置用户代理。
如果您这样做是为了加入php
和jsp
网站,您应该尝试坚持仅在它们之间发送数据,而不是将其他代码发送到通过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()
,但前提是必须这样做。一种更好的方法是某种字典。