2009-06-06 24 views

Respuesta

294

A menos que necesite algo más que los contenidos del archivo, se puede usar file_get_contents.

$xml = file_get_contents("http://www.example.com/file.xml"); 

Para cualquier cosa más compleja, que haría uso de cURL.

+3

Esto es correcto, a menos que necesite usar parámetros de cadena de consulta. – Raptor

+1

@musicfreak: la cadena de consulta a veces es ignorada por algunos servidores para configuraciones de seguridad. también, la consulta entre servidores puede dar como resultado este error: 'no se pudo abrir la secuencia: ¡Falló la solicitud HTTP!' – Raptor

+25

@ShivanRaptor: No estoy seguro de lo que está hablando ... La cadena de consulta es solo parte de la cadena . No hay razón para que un servidor lo ignore. Ahora, obviamente, 'file_get_contents' no le permite hacer la solicitud con cookies personalizadas, encabezados y otras cosas que normalmente enviaría un navegador, por lo que podría no obtener la respuesta que estaba buscando. En ese caso, será mejor que uses CURL de todos modos. (Pero ese no es el caso del OP.) –

55

http_get deberían hacer el truco. Las ventajas de http_get sobre file_get_contents incluyen la capacidad de ver encabezados HTTP, acceder a detalles de solicitud y controlar el tiempo de espera de la conexión.

$response = http_get("http://www.example.com/file.xml"); 
+75

extensión de HTTP no está incluido con PHP y, a menudo no está disponible en los servidores compartidos. – Imran

+25

esto requiere pecl_http> = 0.1.0, que no está instalado por defecto. – Raptor

111

Para peticiones GET/POST más avanzados, puede instalar la biblioteca CURL (http://us3.php.net/curl):

$ch = curl_init("REMOTE XML FILE URL GOES HERE"); // such as http://example.com/example.xml 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
$data = curl_exec($ch); 
curl_close($ch); 
+10

Aunque realmente no es necesario usar CURL para un "requisito simple", +1 , porque es realmente la mejor solución para hacer algo más avanzado con las solicitudes HTTP en PHP. – xyz

+0

Como ya se mencionó, curl es mucho más rápido que 'file_get_contents()'. Una cadena simple de 4 letras tomó alrededor de 10 segundos con ella, mientras que el curl tomó una velocidad más razonable de ~ 1 segundo. –

+0

@pgmann ¿Estás seguro en ese resultado? esto no está en línea con otras estadísticas con lo que se ha citado. De hecho, CURL es más rápido, pero no debería ser mucho más rápido. ¿Tal vez este descenso en el tiempo de respuesta provino del almacenamiento en caché del lado del servidor de algún recurso, etc.? Tal vez deberías repetir la prueba? –

8

Dependiendo de si la configuración de PHP permite fopen en la URL, también se puede simplemente fopen la url con el get argumentos en la cadena (como http://example.com?variable=value)

Editar: Relectura de la pregunta No estoy seguro de si desea pasar variables o no - si no lo está puede simplemente enviar la solicitud fopen con http://example.com/filename.xml - No dude en ignorar la variable = valor parte

17

Recuerde que si usted está usando un proxy que tiene que hacer un pequeño truco en su código PHP:

(PROXY WITHOUT AUTENTICATION EXAMPLE) 

<?php 
$aContext = array(
    'http' => array(
     'proxy' => 'proxy:8080', 
     'request_fulluri' => true, 
    ), 
); 
$cxContext = stream_context_create($aContext); 

$sFile = file_get_contents("http://www.google.com", False, $cxContext); 

echo $sFile; 
?> 
2

En el otro lado, el uso de la API REST de otros servidores son muy populares en PHP. Supongamos que está buscando una forma de redirigir algunas solicitudes HTTP al otro servidor (por ejemplo, obtener un archivo xml). Aquí es un paquete PHP para ayudarle a:

https://github.com/romanpitak/PHP-REST-Client 

lo tanto, obtener el archivo xml:

$client = new Client('http://example.com'); 
$request = $client->newRequest('/filename.xml'); 
$response = $request->getResponse(); 
echo $response->getParsedResponse(); 
Cuestiones relacionadas