CURL istekleri URL konumunu değiştirmek?

1 Cevap php

Ben farklı bir sunucuya (örn. "http://wwww.externalserver.com/login") bir URL'ye bir XML POST-Talebiniz yapıyor bir sayfa var. Bu sunucu yanıt olarak düz HTML gönderiyor. Sorun tarayıcı ist gösterilen URL hala benim yerel sunucuda, en "http://localhost/callExternal.php" diyelim olmasıdır. Dış URL başka bir sayfaya (302) yönlendiriliyor.

Bu hedef sayfanın döndü HTML göreli görüntü yolları içerir. Çünkü uymayan URL bu göreli yollar geçerli değildir ve bu nedenle hiçbir görüntü veya biçembentlerinin yüklenir.

Bu göreli yollar (HTML ayrıştırma ve yolları değiştirmeden) çalışacak şekilde CURL (veya PHP4 çalışan herhangi başka bir çözüm) konumunu değiştirme yapmak için bir yolu var mı?

Bu arama script "http://localhost/callExternal.php" dir:

$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);

Ve bu bağlantı, örneğin ile döndürülen bir HTML pasajı:

<html>
<head>
<link rel="stylesheet" type="text/css" media="print" href="/css/screen.css" />
</head>
<body>test</body>
</html>

Ve URL hala "http://localhost/callExternal.php" gösteriyor, yani Stil için bağlantı Açıkçası çalışmıyor.

1 Cevap

Sen HTML <head> bölümün içine <base> etiketi ekleyerek denemek isteyebilirsiniz; alıntı w3schools,

The <base> tag specifies a default address or a default target for all links on a page.

The <base> tag goes inside the head element.


And, in the HTML 4 specifications :

In HTML, links and references to external images, applets, form-processing programs, style sheets, etc. are always specified by a URI. Relative URIs are resolved according to a base URI, which may come from a variety of sources. The BASE element allows authors to specify a document's base URI explicitly.

When present, the BASE element must appear in the HEAD section of an HTML document, before any element that refers to an external source. The path information specified by the BASE element only affects URIs in the document where the element appears.

Verilen örnekte, bu gibi görünüyor:

<!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>

: Ve göreli URI ".. / Kafes / birds.gif" çözmek istiyorum

http://www.aviary.com/cages/birds.gif