Respuestas:
A menos que necesite más que solo el contenido del archivo, puede usarlo file_get_contents
.
$xml = file_get_contents("http://www.example.com/file.xml");
Para cualquier cosa más compleja, usaría cURL .
failed to open stream: HTTP request failed!
file_get_contents
no le permite realizar la solicitud con cookies personalizadas, encabezados y otras cosas que un navegador normalmente enviaría, por lo que es posible que no obtenga la respuesta que estaba buscando. En ese caso, sería mejor usar CURL de todos modos. (Pero ese no es el caso del OP.)
Para solicitudes GET / POST más avanzadas, 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);
file_get_contents()
. Una cadena simple de 4 letras tomó alrededor de 10 segundos, mientras que el rizo tomó un máximo razonable de ~ 1 segundo.
http_get
debería hacer el truco. Las ventajas de http_get
over file_get_contents
incluyen la capacidad de ver encabezados HTTP, detalles de solicitudes de acceso y controlar el tiempo de espera de la conexión.
$response = http_get("http://www.example.com/file.xml");
Recuerde que si está utilizando un proxy, necesita 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;
?>
Dependiendo de si su configuración de php permite fopen en URL, también podría simplemente buscar la url con los argumentos get en la cadena (como http://example.com?variable=value )
Editar: releyendo la pregunta No estoy seguro de si está buscando pasar variables o no; si no lo está, simplemente puede enviar la solicitud fopen contactando http://example.com/filename.xml - siéntase libre ignorar la variable = valor parte
Me gusta usar fsockopen open para esto.
Por otro lado, el uso de REST API de otros servidores es muy popular en PHP. Supongamos que está buscando una manera de redirigir algunas solicitudes HTTP al otro servidor (por ejemplo, obtener un archivo xml). Aquí hay un paquete PHP para ayudarlo:
https://github.com/romanpitak/PHP-REST-Client
Entonces, obteniendo el archivo xml:
$client = new Client('http://example.com');
$request = $client->newRequest('/filename.xml');
$response = $request->getResponse();
echo $response->getParsedResponse();
Guzzle es una biblioteca muy conocida que hace que sea extremadamente fácil hacer todo tipo de llamadas HTTP. Ver https://github.com/guzzle/guzzle . Instalar con composer require guzzlehttp/guzzle
y ejecutar composer install
. Ahora el código a continuación es suficiente para una llamada http get.
$client = new \GuzzleHttp\Client();
$response = $client->get('https://example.com/path/to/resource');
echo $response->getStatusCode();
echo $response->getBody();