У меня есть страница, которая делает XML POST-запрос URL-адресу на другом сервере (например, «http://wwww.externalserver.com/login»). Этот сервер отправляет простой HTML в качестве ответа. Проблема в том, что URL-адрес, отображаемый в браузере, все еще находится на моем локальном сервере, скажем, «http://localhost/callExternal.php». Внешний URL перенаправляет (302) на другую страницу.Изменить расположение URL-адресов в запросах CURL?
Возвращенный 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>
И в URL все еще показывает" http://localhost/callExternal.php" , поэтому ссылка на панель стилей, очевидно, не работает.
Спасибо, я уже думал об этом, но HTML ответ не может быть изменен, так как он находится на внешнем сервере, не под моим контролем я должен иметь дело с тем, что я получил от – acme
@acme: измените HTML-код после его получения на сервере, прежде чем отправлять его в браузер. – NickFitz
@acme: вместо прямого вывода содержимого, которое вы получаете из вашего запроса на завивание, вам нужно извлечь его в переменную PHP (см. параметр CURLOPT_RETURNTRANSFER) ;; тогда вы можете использовать что-то вроде str_replace для этой переменной ;; и, наконец, echo его содержимое для пользователя. –