En realidad, quiero leer el contenido que viene después de la consulta de búsqueda, cuando está hecho. El problema es que la URL solo acepta POST
métodos, y no realiza ninguna acción con el GET
método ...
Tengo que leer todos los contenidos con la ayuda de domdocument
o file_get_contents()
. ¿Hay algún método que me permita enviar parámetros con el POST
método y luego leer el contenido a través de PHP
?
file_get_contents()
solo si se han habilitado los contenedores fopen. Ver php.net/manual/en/…file_get_contents()
file_get_contents()
es parte del núcleo de PHP. Además, el uso innecesario de una extensión puede ampliar la superficie de ataque de su aplicación. Por ejemplo, Google php curl cvePodrías usar cURL :
fuente
Utilizo la siguiente función para publicar datos usando curl. $ data es una matriz de campos para publicar (se codificará correctamente usando http_build_query). Los datos se codifican usando application / x-www-form-urlencoded.
@Edward menciona que http_build_query puede omitirse ya que curl codificará correctamente la matriz pasada al parámetro CURLOPT_POSTFIELDS, pero tenga en cuenta que en este caso los datos se codificarán usando multipart / form-data.
Utilizo esta función con API que esperan que los datos se codifiquen mediante application / x-www-form-urlencoded. Es por eso que uso http_build_query ().
fuente
http_build_query
convierte la$data
matriz en una cadena, evitando la salida como datos multiparte / formulario.... CURLOPT_RETURNTRANSFER, true
da como resultado$response
el contenido.file_get_contents
y su solución necesita CURL lo que mucha gente no tiene. entonces su solución tal vez esté funcionando, pero no está respondiendo a la pregunta de cómo hacer esto con las funciones nativas de archivo / secuencia incorporadas.Te recomiendo que uses el paquete de código abierto guzzle que está completamente probado en la unidad y utiliza las últimas prácticas de codificación.
Instalando Guzzle
Vaya a la línea de comando en su carpeta de proyecto y escriba el siguiente comando (suponiendo que ya tenga instalado el gestor de paquetes compositor ). Si necesita ayuda para instalar Composer, debería echar un vistazo aquí .
Usando Guzzle para enviar una solicitud POST
El uso de Guzzle es muy sencillo, ya que utiliza una API orientada a objetos liviana:
fuente
Hay otro método CURL si vas por ese camino.
Esto es bastante sencillo una vez que entienda cómo funciona la extensión curl de PHP, combinando varias banderas con llamadas setopt (). En este ejemplo, tengo una variable $ xml que contiene el XML que he preparado para enviar; voy a publicar el contenido de eso en el método de prueba del ejemplo.
Primero inicializamos la conexión, luego configuramos algunas opciones usando setopt (). Estos le dicen a PHP que estamos haciendo una solicitud posterior, y que estamos enviando algunos datos con él, proporcionándonos los datos. El indicador CURLOPT_RETURNTRANSFER le dice a curl que nos dé el resultado como el valor de retorno de curl_exec en lugar de generarlo. Luego hacemos la llamada y cerramos la conexión; el resultado es en $ respuesta.
fuente
$ch
no$curl
, ¿verdad?Si por casualidad está utilizando Wordpress para desarrollar su aplicación (en realidad es una forma conveniente de obtener autorización, páginas de información, etc. incluso para cosas muy simples), puede usar el siguiente fragmento:
Utiliza diferentes formas de realizar la solicitud HTTP real, dependiendo de lo que esté disponible en el servidor web. Para más detalles, consulte la documentación de la API HTTP .
Si no desea desarrollar un tema o complemento personalizado para iniciar el motor de Wordpress, puede hacer lo siguiente en un archivo PHP aislado en la raíz de WordPress:
No mostrará ningún tema ni generará ningún HTML, ¡simplemente piratee con las API de Wordpress!
fuente
Me gustaría agregar algunas ideas sobre la respuesta basada en rizos de Fred Tanrikut. Sé que la mayoría de ellos ya están escritos en las respuestas anteriores, pero creo que es una buena idea mostrar una respuesta que los incluya a todos juntos.
Aquí está la clase que escribí para hacer solicitudes HTTP-GET / POST / PUT / DELETE basadas en curl, relacionadas con el cuerpo de la respuesta:
Mejoras
Ejemplo de uso
OBTENER
ENVIAR
PONER
ELIMINAR
Pruebas
También puede realizar algunas pruebas de servicio interesantes utilizando esta clase simple.
fuente
Otra alternativa del método anterior sin rizos es usar las funciones de flujo nativas :
stream_context_create()
:stream_get_contents()
:Una función POST con estos puede ser simplemente así:
fuente
fclose()
si$fp
es asífalse
. Porquefclose()
espera que un recurso sea parámetro.La mejor forma de enviar
GET
oPOST
solicitar conPHP
es la siguiente:El código está tomado de la documentación oficial aquí http://docs.php.net/manual/da/httprequest.send.php
fuente
Hay uno más que puedes usar
Haga clic aquí para más detalles.
fuente
Estaba buscando un problema similar y encontré un mejor enfoque para hacerlo. Así que aquí va.
Simplemente puede poner la siguiente línea en la página de redirección (por ejemplo, page1.php).
Necesito esto para redirigir las solicitudes POST para las llamadas a la API REST . Esta solución puede redirigir con datos de publicación, así como valores de encabezado personalizados.
Aquí está el enlace de referencia .
fuente
redirect a page request with POST param
vssend POST request
. Para mí el propósito de ambos es el mismo, corrígeme si estoy equivocado.Aquí está usando solo un comando sin cURL. Súper simple
fuente
Pruebe el paquete HTTP_Request2 de PEAR para enviar fácilmente solicitudes POST. Alternativamente, puede usar las funciones curl de PHP o usar un contexto de flujo PHP .
HTTP_Request2 también hace posible simular el servidor , por lo que puede probar su código fácilmente
fuente