Symfony2 : envoyer une Requête HTTP
Je suis en train de faire une Requête HTTP à partir d'un de mes contrôleur de contacter un autre URL, le but étant de communiquer avec une autre URL, et il suffit d'imprimer le code HTML de réponse dans ma page.
J'ai essayé :
$r = new Request();
$r->create('http://www.google.com', 'GET');
return $this->render(...mytemplate..., array('name' => $r->getContent());
Mon modèle est tout simplement l'impression de la variable "nom".
Maintenant, quand je fais ça, rien n'est renvoyé. Il me semble que la demande n'est jamais envoyé, c'est pourquoi rien n'est renvoyé.
Ma question est : comment puis-je envoyer la demande et obtenir le contenu de la réponse?
Merci d'avance.
OriginalL'auteur Gabriel Theron | 2012-05-16
Vous devez vous connecter pour publier un commentaire.
MODIFIER: j'ai fait un GremoBuzzBundle pour Buzz navigateur. Il est similaire à la SensioBuzzBundle mais il a quelques belles options de configuration.
Je suggère d'utiliser Buzz navigateur et l'injection de dépendance. Buzz est un wrapper autour de cURL ou file_get_contents. Modifier votre
deps
fichier en ajoutant ces lignes:Puis installer vendeurs pour télécharger la bibliothèque:
Puis ajouter deux services (
src/YourCompany/YourBundle/Resources/config/services.yml
):Le premier service est le client (je préfère cURL sur file_get_contents), le dernier est le navigateur lui-même. La dernière étape est d'ajouter une ligne de code dans le autochargeur (
app/autoload.php
):Ensuite, vous pouvez obtenir le service et l'utilisateur du navigateur de votre contrôleur code:
première
deps
fichier, puissrc/Company/YourBundle/Resources/config/services.yml
(pour les services) et leapp/autoload.php
.J'obtiens une erreur lorsque je tente de charger la page. Il dit: "Il n'y a pas d'extension en mesure de charger la configuration de "buzz.client.curl"" et "Regardé pour l'espace de noms "buzz.client.curl", aucune n'a été trouvée". Aucune idée d'où il vient?
je l'utilise maintenant sans problèmes à tous. Vous pouvez essayer de: 1) Vérifier que curl est activé et l'a chargé de vous php.fichier ini 2) Effacer cache de Symfony2 3) Veiller à ce que
vendos/buzz/lib/Buzz/Client/Curl.php
Essayé les deux :/ tant pis, je vais régler cette question. Merci pour les réponses!
OriginalL'auteur gremo
Deux problèmes.
Tout d'abord, ce n'est pas le bon usage des
Symfony\Component\HttpFoundation\Request::create()
, qui est un initialiseur statique/usine de toutes sortes. Votre code devrait ressembler à ceciMaintenant, vous avez un bon objet de Demande. Cependant, ce n'est pas pertinent ce qui est de votre deuxième problème: ce n'est pas comment Symfony demande de l'objet est conçu pour fonctionner. Son but n'est pas de l'exécution de requêtes HTTP, ses pour représentant comme des objets dans le cadre.
Longue histoire courte, vous ne pouvez pas le faire de cette façon. Peut-être vous pouvez utilisation de cURL pour gratter la page que vous voulez?
Est-ce accepté par Symfony2?
OriginalL'auteur Peter Bailey
Pourquoi ne pas utiliser curl? De Manuel PHP
Non, curl résultat est une valeur de chaîne.
OriginalL'auteur koral
Je voudrais vous recommandons d'utiliser GuzzleHttp Client meilleurs clients que je connais: http://docs.guzzlephp.org/en/latest/
Il est déjà bon bundle qui l'intègre dans le projet Symfony2:
https://github.com/8p/GuzzleBundle
Puis, à partir de votre contrôleur, vous pouvez appeler le:
Plus d'informations peuvent être trouvées sur: http://docs.guzzlephp.org/en/latest/index.html
OriginalL'auteur Kamil Adryjanek
Apparemment, vous pouvez utiliser Symfony HTTP intégré dans le client. Voir:
http://api.symfony.com/2.0/Symfony/Component/HttpKernel.html
Ce qui suit est une très brut base de code, à l'aide de Silex (construite sur le toit de Symfony). Simplement, il instancie un nouveau client HTTP.
?>
Vous avez également un exemple détaillé d'un client HTTP pour Symfony2 comme une partie de l'unité de test de la documentation. Voir: http://symfony.com/doc/current/book/testing.html
MAIS (edit) ces clients sont des locaux pour votre application. Les concepts illustrés ici sont mieux mis en œuvre avec la BrowserKit composants de Symfony2. Un navigateur sans au sein de Symfony.
Mieux encore, utilisez la Goutte pour les demandes vers des sites web externes. Voir https://github.com/FriendsOfPHP/Goutte pour plus de détails.
OriginalL'auteur Mauro Colella
https://github.com/CircleOfNice/CiRestClientBundle
Bonne API pour faciliter l'utilisation de la boucle de la bibliothèque et elle renvoie une symfony réponse au lieu d'une chaîne de résultats
OriginalL'auteur Tobias