| ||||
| [APORTE] file_get_contents(), cURL, HTTP_Request He visto varios post, indicando de que forma se puede conectar a una pagina externa usando PHP o mostrar una pagina externa a través de PHP, etc. Aqui hay una pequeña información de como lograrlo con diferentes métodos. Si alguien desea añadir al tema, mostrando otro método es bienvenido. En diferentes post estare añadiendo información. Lo estoy haciendo porque me vi en la necesidad de estudiar sobre el tema para unas aplicaciones en el trabajo y creo que será útil para muchos que deseamos aprender sobre el tema. Hay varias maneras de mostrar un URL remoto en PHP. La elección de un método sobre otro depende de las necesidades de su simplicidad, control y portabilidad. Los tres métodos descritos en este post son los estandares file function, la extensión cURL, y la clase de PEAR HTTP_Request. Estos tres métodos pueden generalmente hacer todo lo que necesita y por lo menos uno de ellos deben estar disponibles, sea cual sea su configuración del servidor o capacidad de instalar las extensiones personalizadas. Otras formas de recuperar las URL remotas incluye la extesión pecl_http (http://pecl.php.net/package/pecl_http), que, aunque todavía en desarrollo, ofrece algunas características prometedoras, y utilizando el fsockopen() para abrir un zócalo sobre el que envía una petición HTTP que lo construye pieza por pieza. El uso del estandar "file function" como la función file_get_contents() es simple y conveniente. Sigue automaticamente las redirecciones, así que si utiliza esta función para recuperar el directorio http://www.example.com/persona/ y el servidor le redirecciona a http://www.example.com/people/, obtendrá el contenido de la página de índice de directorio, no un mensaje que le dice que la URL ha cambiado de dirección. También las funciones de archivo estándar de trabajo tanto con HTTP y FTP. El inconveniente de este método es que requiere la directiva de configuración allow_url_fopen a estar activado. La extensión CURL es una poderosa herramienta. Se basa en el popular libcurl (http://curl.haxx.se/) para proporcionar un rápido, configurable mecanismo para el manejo de una amplia variedad de peticiones de red. Si esta extensión está disponible en su servidor, le recomendamos que utilice. Si se desactiva allow_url_fopen y cURL no está disponible, el módulo PEAR HTTP_Request salva el día. Al igual que todos los módulos de PEAR, es puro PHP, por lo que si puede guardar un archivo PHP en su servidor, puede utilizarlo. HTTP_Request soporta casi cualquier cosa que te gustaría hacer cuando se solicite una URL remota, incluyendo la modificación de cabeceras de petición y el cuerpo, utilizando un método arbitrario, respuesta y recuperación de los encabezados. Para mas informacion sobre como instalar los modulo de PEAR puedes ir a http://pear.php.net/manual/en/installation.getting.php Para recibir información de URL seguras, solo escribe https en vez de http. Siempre y cuando en PHP haya sido construido en una libreria SSL tal como OpenSSL, todas las funciones que pueden recibir información de URL regulares pueden recibir información de URL seguras. Verifica la sección de "openssl" en la salida de phpinfo() para ver si tu configuración de php tiene soporte de SSL. Aquí hay varios ejemplos de lo que se puede hacer con los 3 métodos. Obteniendo una URL con file_get_contents()
Código PHP:
Ver originalCopiar Obteniendo una URL con cURL
Código PHP:
Ver originalCopiar Obteniendo una URL con HTTP_Request
Código PHP:
Ver originalCopiar Mostrar una pagina protegida con file_get_contents()
Código PHP:
Ver originalCopiar Mostrar una pagina protegida con cURL
Código PHP:
Ver originalCopiar Mostrar una pagina protegida con HTTP_Request
Código PHP:
Ver originalCopiar Enviar por el método de POST requiere de manejo especial en cada argumento. Con el método de GET, estos argumentos están en la cadena de consulta, pero en un POST van en la solicitud cuerpo. Además, la solicitud necesita una cabecera Content-Length que le dice al servidor el tamaño del contenido a esperar en la solicitud cuerpo. Mostrar una dirección URL con el método de POST en vez del metdo de GET es bien útil cuando la cadena es muy larga, más de 200 caracteres aproximadamente. La especificación de HTTP 1.1 en el RFC 2616 no impone una longitud máxima en las URL, por lo que el comportamiento varía entre las diferentes web y servidores proxy. Si al mostrar las URL con GET y recibes resultados inesperados o resultados con el código de estado 414 ( "Request-URI Too Long"), convierte la solicitud al metodo de POST. Usar el metodo de POST con file_get_contents()
Código PHP:
Ver originalCopiar Usar el metodo de POST con cURL
Código PHP:
Ver originalCopiar Usar el metodo de POST con HTTP_Request
Código PHP:
Ver originalCopiar Las cookies se envían al servidor en el encabezado de solicitud de cookies. La extensión cURL tiene una opción específica en cookies, pero con HTTP_Request, tienes que agregar el encabezado de cookies al igual que con otras cabeceras de petición. Los valores de Cookie múltiples se envían en una lista delimitada por coma. En los ejemplos vamos a enviar dos cookies: una con el nombre de user y con el valor FDW y otra con el nombre de actividad y con el valor de programacion. Enviar cookies con file_get_contents()
Código PHP:
Ver originalCopiar Enviar cookies con cURL
Código PHP:
Ver originalCopiar Enviar cookies con HTTP_Request
Código PHP:
Ver originalCopiar Última edición por abimaelrc; 14/08/2010 a las 06:45 |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Continuación de los ejemplos... Seguir redireccionamientos con file_get_contents() Nota: El file_get_contents() sigue automáticamente las redirecciones (header("Location: redireccion.php")).
Código PHP:
Ver originalCopiar Seguir redireccionamientos con cURL
Código PHP:
Ver originalCopiar Seguir redireccionamientos con HTTP_Client Nota: HTTP_request no sigue las redirecciones, pero el módulo de PEAR HTTP_Client logra lo que queremos
Código PHP:
Puede que si el servidor está en safe_mode te dé un error, para más información de como solventar este problema leer el siguiente aporte http://www.forosdelweb.com/f18/aport...bit-ly-808160/ (por Triby).Ver originalCopiar Como hemos indicado anteriormente el file_get_contents() sigue automáticamente las redirecciones (header("Location: redireccion.php")). A partir de PHP 5.0.0, file_get_contents() y fopen() nos da unas opciones especificas acerca de como obtener el stream. En PHP 5.1.0 y posteriores, una de esas opciones es max_redirects el número máximo de redirecciones a seguir. Si indicamos el max_redirects a 0 o 1, solo hace una solicitud. El max_redirects realmente no indica el número de redirecciones deben seguirse, pero el número máximo de solicitudes que deben efectuarse en el momento siguiente a la cadena de redireccionamiento. Es decir, un valor de 1 le dice a PHP que al menos una solicitud debe seguir, y no un redireccionamiento. Un valor de 2 le dice a PHP para que al menos de 2 solicitudes deben seguir y no más de 1 redireccionamiento. (Un valor de 0, sin embargo, se comporta como un valor de 1, PHP hace sólo 1 solicitud.) No seguir redirecciones con file_get_contents()
Código PHP:
Ver originalCopiar No seguir redirecciones con cURL Nota: Para no seguir las redirecciones no uses CURLOPT_FOLLOWLOCATION
Código PHP:
Ver originalCopiar No seguir redirecciones con HTTP_Request Nota: HTTP_Request no sigue redirecciones
Código PHP:
Ver originalCopiar Última edición por abimaelrc; 09/08/2010 a las 13:03 |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Continuación de los ejemplos... Si quieres obtener una URL remota, pero no quieres esperar demasiado tiempo si el servidor remoto está ocupado o lento. Configurar tiempo limite con file_get_contents() Nota: Estableceremos el tiempo limite a 15 segundos
Código PHP:
Ver originalCopiar Configurar tiempo limite con cURL Nota: Estableceremos el tiempo limite a 15 segundos
Código PHP:
Ver originalCopiar Configurar tiempo limite con HTTP_Request Nota: Estableceremos el tiempo limite a 15 segundos
Código PHP:
Ver originalCopiar Si dependes de un servicio remoto, puede estar funcionando y en marcha, pero no estara en condiciones de manejar sus pedidos debido a problemas de red entre tu servidor y el servidor remoto. Limitar la cantidad de tiempo que espera de PHP para conectar a un servidor remoto es una buena idea, si se utilizan datos procedentes de fuentes remotas que sea parte del proceso de construcción de la página. Todas las técnicas que describiremos limita la cantidad de tiempo de espera de PHP para conectar a un servidor remoto. Si estas realmente preocupado por las respuestas rápidas, adicionalmente configura el límite de cuánto tiempo PHP espera recibir los datos de los zócalos conectados. Para una conexión stream, utilice la función de stream_set_timeout(). Para esta función necesitas abrir un stream con fopen() y no con file_get_contents(). En los ejemplo limitaremos el tiempo de leer a 20 segundos. Aunque el establecimiento de conexión y los tiempos de lectura puede mejorar el rendimiento, también puede dar lugar a respuestas ilegibles. La secuencia de comandos puede leer sólo una respuesta parcial ante un tiempo de expiración. Si ha establecido los tiempos, asegúrese de validar toda la respuesta que ha recibido. Por otra parte, en situaciones en las que la generación de la página rápido es fundamental, puedes recuperar los datos externos en un proceso separado y escribir a una memoria caché local. De esta forma, sus páginas pueden usar el caché, sin temor a límites de tiempo o respuestas parciales. Configurar el tiempo de leer con fopen()
Código PHP:
Ver originalCopiar Configurar el tiempo de leer con cURL
Código PHP:
Ver originalCopiar Configurar el tiempo de leer con HTTP_Request
Código PHP:
Ver originalCopiar Última edición por abimaelrc; 30/09/2011 a las 00:54 |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Cotinuación de los ejemplos... Enviar archivos con cURL
Código PHP:
Ver originalCopiar Aquí hay más información de como conectarse a un servidor que requiere autentificarse con cookies Ejemplo usando cURL y URL seguras
Código PHP:
Este ejemplo fue tomado de este tema Ver originalCopiar Última edición por abimaelrc; 24/09/2011 a las 17:27 |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Para mostrar una página que incluye variables de cadena en la consulta, puedes hacer uso de http_build_query() para crear la cadena de consulta. Se acepta una serie de clave/valor en pares y devuelve una única cadena con todo escapado correctamente. Usted es responsable del simbolo de ? en el URL que establecen la consulta. Ejemplo con file_get_contents()
Código PHP:
Ver originalCopiar Ya hemos visto como obtener información de otros servidores. Si deseas manejar la informacion en vez de imprimirlo directamente en la pagina lo pasas a una variable y luego lo puedes manejar. Ejemplo de un codigo que desea mostrar en la pagina el resultado de las palabras que buscas pero que estén destacadas ("highlighted").
Código PHP:
Ver originalCopiar $body representa el resultado que hayamos obtenido usando uno de los métodos que hemos usado. El resultado imprimira:
Código html:
Ver originalCopiar Bueno esta abierto para los demas post ![]() ![]() ![]() Creo que este último post debería ser otro aporte ![]() ![]()
__________________ Verifica antes de preguntar. Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos Última edición por abimaelrc; 31/05/2010 a las 04:26 |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Para poder manipular los links de lo que hayamos obtenido usando cualquiera de los metodos mencionados podemos usar este codigo. En este caso usaré file_get_contents()
Código PHP:
Ver originalCopiar Para bajar un archivo usando cURL se puede lograr de esta forma
Código PHP:
Ver originalCopiar Para bajar un archivo usando file_get_contents se puede lograr de esta forma
Código PHP:
Ver originalCopiar Para leer un sitio web que verifica si es un navegador o no el que trata de ver la página web y solo despliega la información si es un navegador el que visita el sitio, puedes tratar el siguiente código file_get_contents
Código PHP:
Ver originalCopiar cURL
Código PHP:
Un ejemplo lo pueden ver en este tema http://www.forosdelweb.com/f18/enigm...-error-833165/Ver originalCopiar Enviar petición, con la mayoría de las cabeceras que envían los navegadores file_get_contents
Código PHP:
Ver originalCopiar cURL
Código PHP:
Ver originalCopiar Para autenticar, por ejemplo htpasswd se puede lograr de esta forma
Código PHP:
Este fue tomado del siguiente tema http://www.forosdelweb.com/f18/obten...s-http-956656/ Ver originalCopiar
__________________ Verifica antes de preguntar. Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos Última edición por abimaelrc; 09/11/2011 a las 08:57 |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Para ver el estatus de algún sitio, con file_get_contents hay una variable que sostiene la información de la cabecera $http_response_header
Código PHP:
El problema de esta forma es que file_get_contents, tiene que cargar toda la página y una vez cargada la variable te dará la información. Puedes indicar límites a la descarga indicando el cuarto y quinto parametro que no pase información de la página o lea por ejemplo un solo caracter. Ver originalCopiar
Código PHP:
Pero hay una forma más sencilla de lograr ver la cabecera y es usando get_headers. Ver originalCopiar
Código PHP:
Ver originalCopiar También cURL puede ver los estatus de los sitios web. Para este código verificaremos el estatus de los enlaces. Es una buena forma para ver si los enlaces que hemos posteado en la pagina estan rotos o han sido movidos. Solo escribe el nombre en el navegador http://localhost/nombre_de_este_arch...s_de_links.com No tiene que ser otra direccion puede ser hasta tus propios archivos. Una vez que una página se haya cargado, el programa utiliza el XPath para obtener una lista de enlaces en la página. Entonces, después de un preprocesamiento busca cada uno de los vínculos, los enlace son recuperados. Debido a que sólo necesita las cabeceras de estas respuestas, no necesitamos usar el método de GET, esto lo hacemos con la opción CURLOPT_NOBODY. Al activar CURLOPT_HEADER le indica a curl_exec() que incluya en la respuesta la cabecera en la cadena que envia. Basado en la respuesta, el estatus del link es impreso a la misma vez con la nueva localidad si ha sido movido.
Código PHP:
Ver originalCopiar Para hacer la petición usando un proxy puedes hacerlo con cURL de esta forma:
Código PHP:
Este código fue tomado de este tema http://www.forosdelweb.com/f18/curl-...8/#post3784335Ver originalCopiar Para hacer la petición usando un proxy puedes hacerlo con fopen de esta forma:
Código PHP:
Este código fue tomado de este tema http://www.forosdelweb.com/4147617-post93.htmlVer originalCopiar IPN (Instant Payment Notification) Paypal y cURL Para enviar a Paypal y verificar si es verdadero la transacción que haya hecho el usuario, usando el IPN (Instant Payment Notification)
Código PHP:
Para obtener el archivo cacert.pem deben ir a http://curl.haxx.se/docs/caextract.html y bajarlo o copiar y pegar el contenido a ese archivo con ese nombre y extensión. Lo deben colocar al lado del archivo que van a usar este código o a la ruta que hayan indicado. Ver originalCopiar Esta información la tomé de la siguiente página http://www.geekality.net/2011/05/28/...ification-ipn/
__________________ Verifica antes de preguntar. Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos Última edición por abimaelrc; 18/04/2012 a las 08:45 |
| |||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request muy interesante, sobre todo lo de que se puede usar la función stream_context_create con file_get_contents
__________________ Todo sobre programación en PHP |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Aqui tienes una lista de todas las posibles formas para cargar un XML con PHP. Verifica si con el DOM logras lo que quieres.
__________________ Verifica antes de preguntar. Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos |
| |||
| Pregunta: timeout Antes que nada, es la segunda vez que escribo, porque no se donde fue la primera! Desde mi hosting no puedo acceder a un rss de yahoo, ni con curl ni con get_file_contents. lei todo el tuto (muy bueno por cierto) y no logro dar en el clavo, siempreme responde: Warning: file_get_contents(weather.yahooapis.com/forecastrss?p=CAXX0443&u=c) [function.file-get-contents]: failed to open stream: Connection timed out in... (la url del rss esta mal escrita para que la acepte el foro, le quite las 3w) Tenes idea de que puede no funcionar? muchas gracias! |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Lo hice de esta forma y me salio. No le coloques las www con eso no sale ni escribiendolo en el campo de direcciones
Código php:
Ver originalCopiar
__________________ Verifica antes de preguntar. Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos |
| |||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Cita: Tenes razon, lo que le habia borrado era eso (no puedo escribirlo aca aun) y no las 3w, pero aun asi no logro conectarme. Si te sirve de dato, desde este mismo hosting no he podido conectarme remotamente a una db externa.
Iniciado por abimaelrc Lo hice de esta forma y me salio. No le coloques las www con eso no sale ni escribiendolo en el campo de direcciones
Código php:
Ver originalCopiar He probado de muchas formas distintas distintas y no logro leer de afuera, tenes idea que puede ser? Gracias de antemano por contestarme tan rapido! Si te llega a interesar te hago un ftp para probar . |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Tienes que ver si tienen activado allow_url_fopen. La forma de verlo es usando el phpinfo() y ver si esta activado.
__________________ Verifica antes de preguntar. Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Para bajar archivos.... Edito: Se encuentra en el mensaje #6
__________________ Verifica antes de preguntar. Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos Última edición por abimaelrc; 09/04/2010 a las 06:14 |
| |||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Realmente me volvi loco probando de todo, hasta que al final llame a mi hosting y no me dijeron que era, simplemente desde donde yo estaba alojado no se podia salir, asi que me cambiaron de servidor y listo. Te agradezco mucho tu ayuda de todas maneras!! |
| |||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Genial! Esto estaba buscando...!! Pero tengo una duda. Como puedo ver cuanto pesa el archivo antes de bajarlo? Tambien necesito saber si es de determinado tipo. Por ejemplo, ZIP, RAR, etc... Si se cumplen las condiciones de peso y tipo de arhivo quiero que se baje, pero si no NO... |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Muy interesante... jeje, se me ocurren muchas cosas indebidas que se pueden hacer :D
__________________ Si te gusto/sirvió mi respuesta, dame un buen karma... no se que utilidad tenga en el foro, pero eleva mi ego. :D -- Comunidad Anime | ikawaii.net |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request @anonimooo0, Para la primera las funciones que conozco se tienen que trabajar desde el servidor que estes usando el codigo de cURL, por ejemplo tienes esta funcion filesize. Para la segunda con basename puedes saber el tipo de extension o mime_content_type o pathinfo.
__________________ Verifica antes de preguntar. Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos Última edición por abimaelrc; 23/10/2009 a las 06:42 |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Hiciste la prueba usando direccion absoluta, por ejemplo usando pathinfo
Código PHP:
Ver originalCopiar
__________________ Verifica antes de preguntar. Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Una pregunta, tal vez ya esta la respuesta... pero no la abre visto. Supongamos que llamo a una pagina pero existe un link en especifico que no quiero que salga. ¿Como lo elimino?
__________________ Si te gusto/sirvió mi respuesta, dame un buen karma... no se que utilidad tenga en el foro, pero eleva mi ego. :D -- Comunidad Anime | ikawaii.net |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Podrias lograrlo colocandolo en una condicion y usando preg_match, si esta el link especifico que estas indicando entonces con preg_replace o str_replace podrías borrar esa parte del link.
__________________ Verifica antes de preguntar. Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos |
| ||||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Si es posible usar el codigo con google, mira este ejemplo
Código PHP:
Ver originalCopiar
__________________ Verifica antes de preguntar. Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos |
| |||
| hostia, y porque ahora me funciona? DIOS! gracias! toda la tarde en ello para que 2 lineas funcionen... eso si solo me funciona en local, pero me sirve!!! guau me acabas de librar de trabajo de... 1 mes a hacerlo en... 2 dias! Última edición por GatorV; 06/01/2010 a las 15:18 |
| |||
| Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request Esto es lo que necesitaba n.n Cita: <?php $url = 'http://www.example.com/hola.zip'; $g=basename($url); if(!is_file($g)){ $fp=fopen ($g, "w"); $ch=curl_init($url); curl_setopt ($ch,CURLOPT_FILE, $fp); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,60); curl_exec ($ch); curl_close ($ch); fclose($fp); } lo implemente en mi página pero lo estoy usando para grabar más de una imagen de diferentes urls las dudas son: 1. como hacer para grabarlos a una carpeta especifica? 2. pero con otro nombre? |