我有一个页面正在对另一台服务器上的URL进行XML POST-Request(例如“http://wwww.externalserver.com/login”)。此服务器正在发送纯HTML作为响应。问题是,浏览器中显示的URL仍然在我的本地服务器上,让我们说“http://localhost/callExternal.php”。外部URL重定向(302)到另一页面。
此目标页面的返回HTML包含相对图像路径。由于URL不匹配,因此这些相对路径无效,因此不会加载图像或样式表。
有没有办法让CURL(或任何其他解决方案在PHP4中工作)更改位置,以便这些相对路径可以工作(不解析HTML并更改路径)?
这是调用脚本“http://localhost/callExternal.php”:
$data = '<?xml version="1.0" encoding="UTF-8"?><Some XML></Some XML>';
$res = curl_init('http://wwww.externalserver.com/login');
curl_setopt($res, CURLOPT_POST, 1);
curl_setopt($res, CURLOPT_HEADER, 0);
curl_setopt($res, CURLOPT_POSTFIELDS, $data);
curl_setopt($res, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($res, CURLOPT_HTTPHEADER, array("Content-Type: text/xml; charset=UTF-8"));
curl_exec($res);
curl_close($res);
这是返回HTML的一个片段,其中包含一个链接示例:
<html>
<head>
<link rel="stylesheet" type="text/css" media="print" href="/css/screen.css" />
</head>
<body>test</body>
</html>
网址仍显示“http://localhost/callExternal.php”,因此指向样式表的链接显然不起作用。
答案 0 :(得分:1)
您可能想尝试在HTML的<base>
部分中插入<head>
标记;引用w3schools:
<base>
标记指定默认值 地址或所有人的默认目标 页面上的链接。
<base>
标记在头部内部 元件。
在HTML中,链接和引用 外部图像,小程序, 表格处理程序,风格 表格等总是由a指定 URI。相对URI已解析 根据基URI,可能 来自各种渠道。该 BASE元素允许作者指定 明确显示文档的基本URI。
如果存在,BASE元素必须 出现在HTML的HEAD部分 文档,在任何元素之前 指外部来源。路径 BASE指定的信息 元素只影响中的URI 记录元素出现的位置。
给出的例子如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>Our Products</TITLE>
<BASE href="http://www.aviary.com/products/intro.html">
</HEAD>
<BODY>
<P>Have you seen our <A href="../cages/birds.gif">Bird Cages</A>?
</BODY>
</HTML>
相对URI“../cages/birds.gif”将解析为:
http://www.aviary.com/cages/birds.gif