更改CURL请求的URL位置?

时间:2009-09-18 10:44:33

标签: php html url curl

我有一个页面正在对另一台服务器上的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”,因此指向样式表的链接显然不起作用。

1 个答案:

答案 0 :(得分:1)

您可能想尝试在HTML的<base>部分中插入<head>标记;引用w3schools

  

<base>标记指定默认值   地址或所有人的默认目标   页面上的链接。

     

<base>标记在头部内部   元件。


并且,在HTML 4 specifications

  

在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