En fait, je veux lire le contenu qui vient après la requête de recherche, quand elle est terminée. Le problème est que l'URL n'accepte que les POST
méthodes et n'entreprend aucune action avec la GET
méthode ...
Je dois lire tout le contenu à l'aide de domdocument
ou file_get_contents()
. Y a-t-il une méthode qui me permettra d'envoyer des paramètres avec la POST
méthode puis de lire le contenu via PHP
?
file_get_contents()
uniquement si les wrappers fopen ont été activés. Voir php.net/manual/en/…file_get_contents()
file_get_contents()
fait partie du noyau de PHP. De plus, l'utilisation d'une extension inutilement peut élargir la surface d'attaque de votre application. Par exemple, Google php curl cveVous pouvez utiliser cURL :
la source
J'utilise la fonction suivante pour publier des données en utilisant curl. $ data est un tableau de champs à publier (sera correctement encodé en utilisant http_build_query). Les données sont encodées en utilisant application / x-www-form-urlencoded.
@Edward mentionne que http_build_query peut être omis car curl encodera correctement le tableau passé au paramètre CURLOPT_POSTFIELDS, mais sachez que dans ce cas, les données seront encodées à l'aide de multipart / form-data.
J'utilise cette fonction avec des API qui s'attendent à ce que les données soient encodées en utilisant application / x-www-form-urlencoded. C'est pourquoi j'utilise http_build_query ().
la source
http_build_query
convertit le$data
tableau en une chaîne, en évitant la sortie sous forme de parties / données de formulaire.... CURLOPT_RETURNTRANSFER, true
résulte en$response
contenant le contenu.file_get_contents
et votre solution a besoin de CURL ce que beaucoup de gens n'ont pas. donc votre solution fonctionne peut-être, mais elle ne répond pas à la question de savoir comment le faire avec les fonctions natives de fichier / flux intégré.Je vous recommande d'utiliser le package open-source Guzzle qui est entièrement testé et l' unité utilise les dernières pratiques de codage.
Installation de Guzzle
Accédez à la ligne de commande dans votre dossier de projet et tapez la commande suivante (en supposant que vous avez déjà installé le gestionnaire de package composer ). Si vous avez besoin d'aide pour installer Composer, vous devriez jeter un œil ici .
Utilisation de Guzzle pour envoyer une demande POST
L'utilisation de Guzzle est très simple car il utilise une API orientée objet légère:
la source
Il y a une autre méthode CURL si vous allez dans ce sens.
C'est assez simple une fois que vous avez compris comment fonctionne l'extension PHP curl, en combinant divers indicateurs avec des appels setopt (). Dans cet exemple, j'ai une variable $ xml qui contient le XML que j'ai préparé pour envoyer - je vais publier le contenu de cela dans la méthode de test de l'exemple.
Nous avons d'abord initialisé la connexion, puis nous avons défini certaines options à l'aide de setopt (). Ceux-ci indiquent à PHP que nous faisons une demande de publication et que nous envoyons des données avec, fournissant les données. L'indicateur CURLOPT_RETURNTRANSFER indique à curl de nous donner la sortie comme valeur de retour de curl_exec plutôt que de la sortir. Ensuite, nous faisons l'appel et fermons la connexion - le résultat est en réponse $.
la source
$ch
pas être$curl
, correct?Si par hasard vous utilisez Wordpress pour développer votre application (c'est en fait un moyen pratique d'obtenir une autorisation, des pages d'informations, etc., même pour des choses très simples), vous pouvez utiliser l'extrait de code suivant:
Il utilise différentes façons de faire la demande HTTP réelle, selon ce qui est disponible sur le serveur Web. Pour plus de détails, consultez la documentation de l'API HTTP .
Si vous ne souhaitez pas développer un thème ou un plugin personnalisé pour démarrer le moteur Wordpress, vous pouvez simplement faire ce qui suit dans un fichier PHP isolé dans la racine wordpress:
Il ne montrera aucun thème ou ne produira aucun HTML, il suffit de pirater avec les API Wordpress!
la source
Je voudrais ajouter quelques réflexions sur la réponse en boucle de Fred Tanrikut. Je sais que la plupart d'entre eux sont déjà écrits dans les réponses ci-dessus, mais je pense que c'est une bonne idée de montrer une réponse qui les inclut tous ensemble.
Voici la classe que j'ai écrite pour faire des requêtes HTTP-GET / POST / PUT / DELETE basées sur curl, concernant à peu près le corps de la réponse:
Améliorations
Exemple d'utilisation
AVOIR
PUBLIER
METTRE
SUPPRIMER
Essai
Vous pouvez également effectuer des tests de service intéressants en utilisant cette classe simple.
la source
Une autre alternative de la méthode sans boucle ci- dessus consiste à utiliser les fonctions de flux natives :
stream_context_create()
:stream_get_contents()
:Une fonction POST avec ceux-ci peut simplement être comme ceci:
la source
fclose()
si$fp
c'est le casfalse
. Parce quefclose()
attend une ressource est un paramètre.La meilleure façon d'envoyer
GET
ou dePOST
demander avecPHP
est la suivante:Le code est tiré de la documentation officielle ici http://docs.php.net/manual/da/httprequest.send.php
la source
Il y en a un de plus que vous pouvez utiliser
Cliquez ici pour plus de détails
la source
Je cherchais un problème similaire et j'ai trouvé une meilleure approche pour le faire. Alors voilà.
Vous pouvez simplement mettre la ligne suivante sur la page de redirection (par exemple page1.php).
J'en ai besoin pour rediriger les demandes POST pour les appels d'API REST . Cette solution est capable de rediriger avec des données de publication ainsi que des valeurs d'en-tête personnalisées.
Voici le lien de référence .
la source
redirect a page request with POST param
vssend POST request
. Pour moi, le but des deux est le même, corrigez-moi si je me trompe.Voici en utilisant une seule commande sans cURL. Super simple.
la source
Essayez le package HTTP_Request2 de PEAR pour envoyer facilement des requêtes POST. Alternativement, vous pouvez utiliser les fonctions curl de PHP ou utiliser un contexte de flux PHP .
HTTP_Request2 permet également de simuler le serveur , vous pouvez donc tester facilement votre code
la source