Deseo realizar una solicitud GET simple a otro script en un servidor diferente. ¿Cómo hago esto?
En un caso, solo necesito solicitar un script externo sin la necesidad de ningún resultado.
make_request('http://www.externalsite.com/script1.php?variable=45'); //example usage
En el segundo caso, necesito obtener la salida de texto.
$output = make_request('http://www.externalsite.com/script2.php?variable=45');
echo $output; //string output
Para ser honesto, no quiero jugar con CURL ya que este no es realmente el trabajo de CURL. Tampoco quiero usar http_get porque no tengo las extensiones PECL.
¿Funcionaría fsockopen? Si es así, ¿cómo hago esto sin leer el contenido del archivo? ¿No hay otra forma?
Gracias a todos
Actualizar
Debería haber agregado, en el primer caso, no quiero esperar a que el script devuelva nada. Según tengo entendido, file_get_contents () esperará a que la página se cargue por completo, etc.
php
http
curl
asynchronous
Abdominales
fuente
fuente
Respuestas:
file_get_contents
harás lo que quierasEditar: una forma de disparar una solicitud GET y regresar de inmediato.
Citado de http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html
Lo que hace esto es abrir un socket, disparar una solicitud de obtención, cerrar inmediatamente el socket y regresar.
fuente
curl_post_async
y obtener incluso votos positivos ...Así es como hacer que la respuesta de Marquis funcione con solicitudes POST y GET:
fuente
ssl://hostname
lugar de simplementehostname
.Con respecto a su actualización, acerca de no querer esperar a que se cargue la página completa, creo que
HEAD
lo que está buscando es una solicitud HTTP .get_headers debería hacer esto; creo que solo solicita los encabezados, por lo que no se enviará el contenido completo de la página.
"PHP / Curl: la solicitud HEAD lleva mucho tiempo en algunos sitios" describe cómo realizar una
HEAD
solicitud usando PHP / CurlSi desea activar la solicitud y no retrasar el script en absoluto, hay algunas formas de diversas complejidades.
"wget -O /dev/null $carefully_escaped_url"
: esto será específico de la plataforma, y debe tener mucho cuidado con los parámetros de escape al comandofuente
Tu no Si bien PHP ofrece muchas formas de llamar a una URL, no ofrece soporte listo para usar para realizar ningún tipo de procesamiento asíncrono / enhebrado por solicitud / ciclo de ejecución. Cualquier método para enviar una solicitud de una URL (o una declaración SQL, o etc.) esperará algún tipo de respuesta. Necesitará algún tipo de sistema secundario que se ejecute en la máquina local para lograr esto (busque en Google "cola de trabajos php")
fuente
Te recomendaría una biblioteca PHP bien probada: curl-easy
fuente
Si está utilizando un entorno Linux, puede utilizar el comando exec de PHP para invocar el curl de Linux. Aquí hay un código de muestra, que hará una publicación HTTP asincrónica.
Este código no necesita bibliotecas PHP adicionales y puede completar la publicación http en menos de 10 milisegundos.
fuente
fuente
getstatus()
owaitSend()
owaitResult()
. De esa manera, la persona que llama puede obtener un comportamiento completamente asincrónico llamando en un bucle para verificar si hay resultados y, si no, continuar con cualquier otra tarea que se esté ejecutando. Hmm, ahora quiero portarTask
de .net a php…Interesante problema. Supongo que solo desea activar algún proceso o acción en el otro servidor, pero no le importa cuáles son los resultados y desea que su secuencia de comandos continúe. Probablemente hay algo en cURL que puede hacer que esto suceda, pero es posible que desee considerar usar
exec()
para ejecutar otro script en el servidor que realiza la llamada si cURL no puede hacerlo. (Por lo general, la gente quiere los resultados de la llamada al script, por lo que no estoy seguro de si PHP tiene la capacidad de activar el proceso). Conexec()
usted podría ejecutar unwget
script PHP o incluso otro que realice la solicitud confile_get_conents()
.fuente
Será mejor que considere utilizar Message Queues en lugar de los métodos recomendados. Estoy seguro de que esta será una mejor solución, aunque requiere un poco más de trabajo que simplemente enviar una solicitud.
fuente
déjame mostrarte mi camino :)
necesita nodejs instalado en el servidor
(mi servidor envía 1000 https get request tarda solo 2 segundos)
url.php:
urlscript.js>
fuente
Para mí, la pregunta sobre la solicitud GET asincrónica se debe a que me encontré con una situación en la que necesito hacer cientos de solicitudes , obtener y tratar con datos de resultados en cada solicitud y cada solicitud requiere milisegundos significativos de ejecución que llevan a minutos (!) De ejecución total con simple
file_get_contents
.En este caso, fue muy útil el comentario de w_haigh en php.net sobre la función http://php.net/manual/en/function.curl-multi-init.php
Entonces, aquí está mi versión mejorada y limpia de hacer muchas solicitudes simultáneamente. Para mi caso es equivalente a la forma "asincrónica". ¡Puede ser de ayuda para alguien!
Es fácil reescribir esto para manejar POST u otros tipos de solicitudes HTTP (S) o cualquier combinación de ellas. Y soporte de cookies, redireccionamientos, http-auth, etc.
fuente
Tratar:
Esto NO funcionará como un módulo de Apache, debe usar CGI.
fuente
Encontré este enlace interesante para hacer procesamiento asincrónico (obtener solicitud).
askapache
Además, puede realizar un procesamiento asincrónico utilizando una cola de mensajes como, por ejemplo, beanstalkd.
fuente
Aquí hay una adaptación de la respuesta aceptada para realizar una solicitud GET simple.
Una cosa a tener en cuenta si el servidor reescribe la URL, esto no funcionará. Deberá utilizar un cliente http con más funciones.
fuente
Solo algunas correcciones en los guiones publicados anteriormente. Lo siguiente me funciona
fuente
Nadie parece mencionar a Guzzle , que es un cliente HTTP de PHP que facilita el envío de solicitudes HTTP. Puede funcionar con o sin
Curl
. Puede enviar solicitudes tanto síncronas como asincrónicas.fuente
Basado en este hilo, hice esto para mi proyecto codeigniter. Funciona muy bien. Puede tener cualquier función procesada en segundo plano.
Un controlador que acepta las llamadas asincrónicas.
Y una biblioteca que hace las llamadas asincrónicas
Este método se puede llamar para procesar cualquier modelo :: método () en el 'fondo'. Utiliza argumentos variables.
fuente
Sugerencia: formatee una página HTML FRAMESET que contenga, digamos, 9 marcos en su interior. Cada marco OBTENDRÁ una "instancia" diferente de su página myapp.php. Habrá 9 subprocesos diferentes ejecutándose en el servidor web, en paralelo.
fuente
Para PHP5.5 +, mpyw / co es la solución definitiva. Funciona como si fuera tj / co en JavaScript.
Ejemplo
Suponga que desea descargar los avatares de varios usuarios de GitHub especificados. Los siguientes pasos son necesarios para cada usuario.
<img class="avatar" src="...">
y solicítalo (OBTENER IMAGEN)---
: Esperando mi respuesta...
: Esperando otra respuesta en flujos paralelosMuchos
curl_multi
scripts basados en famosos ya nos proporcionan los siguientes flujos.Sin embargo, esto no es lo suficientemente eficiente. ¿Quiere reducir los tiempos de espera inútiles
...
?Sí, es muy fácil con mpyw / co. Para obtener más detalles, visite la página del repositorio.
fuente
Aquí está mi propia función PHP cuando hago POST en una URL específica de cualquier página ...
Ejemplo: * uso de mi función ...
fuente
Prueba este código ...
No olvide habilitar la extensión PHP CURL.
fuente
CURLOPT_TIMEOUT_MS
por ejemplo, 100 milisegundos en lugar de loCURLOPT_TIMEOUT
que es en segundos y tiene un mínimo de 1 segundo, para una ejecución más rápida.Esto funciona bien para mí, lamentablemente no puede recuperar la respuesta de su solicitud:
Funciona muy rápido, sin necesidad de sockets tcp sin procesar :)
fuente