Estoy planeando usar PHP para un requisito simple. Necesito descargar un contenido XML de una URL, para lo cual debo enviar la solicitud HTTP GET a esa URL.¿Cómo enviar una solicitud GET desde PHP?
¿Cómo lo hago en PHP?
Estoy planeando usar PHP para un requisito simple. Necesito descargar un contenido XML de una URL, para lo cual debo enviar la solicitud HTTP GET a esa URL.¿Cómo enviar una solicitud GET desde PHP?
¿Cómo lo hago en PHP?
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.
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");
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);
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
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. –
@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? –
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
Me gusta usar fsockopen abierto para esto.
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;
?>
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();
Esto es correcto, a menos que necesite usar parámetros de cadena de consulta. – Raptor
@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
@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.) –