2009-06-06 8 views
219

Je prévois d'utiliser PHP pour une exigence simple. Je dois télécharger un contenu XML à partir d'une URL, pour laquelle j'ai besoin d'envoyer une requête HTTP GET à cette URL.Comment envoyer une requête GET depuis PHP?

Comment puis-je le faire en PHP?

Répondre

294

Sauf si vous avez besoin plus que le contenu du fichier, vous pouvez utiliser file_get_contents.

$xml = file_get_contents("http://www.example.com/file.xml"); 

Pour quelque chose de plus complexe, j'utiliserais cURL.

+3

Ceci est correct, sauf si vous devez utiliser des paramètres de chaîne de requête. – Raptor

+1

@musicfreak: une chaîne de requête est parfois ignorée par certains serveurs pour les paramètres de sécurité. aussi, une requête inter-serveur peut entraîner cette erreur: 'Echec de l'ouverture du flux: requête HTTP échouée!' – Raptor

+25

@ShivanRaptor: Je ne suis pas sûr de ce dont vous parlez ... La chaîne de requête est juste une partie de la chaîne . Il n'y a aucune raison qu'un serveur l'ignore. Maintenant, de toute évidence, 'file_get_contents' ne vous permet pas de faire la demande avec des cookies personnalisés, des en-têtes et d'autres choses qu'un navigateur enverrait typiquement, ainsi vous pourriez ne pas obtenir la réponse que vous cherchiez. Dans ce cas, vous feriez mieux d'utiliser CURL de toute façon. (Mais ce n'est pas le cas de l'OP.) –

55

http_get devrait faire l'affaire. Les avantages de http_get sur file_get_contents incluent la possibilité d'afficher les en-têtes HTTP, d'accéder aux détails de la demande et de contrôler le délai d'expiration de la connexion.

$response = http_get("http://www.example.com/file.xml"); 
+75

extension http n'est pas livré avec PHP et souvent pas disponibles dans les hôtes partagés. – Imran

+25

cela nécessite pecl_http> = 0.1.0, qui n'est pas installé par défaut. – Raptor

111

Pour plus avancés demandes GET/POST, vous pouvez installer la bibliothèque CURL (http://us3.php.net/curl): Selon

$ch = curl_init("REMOTE XML FILE URL GOES HERE"); // such as http://example.com/example.xml 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
$data = curl_exec($ch); 
curl_close($ch); 
+10

Bien qu'il n'y ait vraiment pas besoin d'utiliser CURL pour une "simple exigence", +1 , parce que c'est vraiment la meilleure solution pour faire quoi que ce soit de plus avancé avec les requêtes HTTP en PHP. – xyz

+0

Comme déjà mentionné, curl est beaucoup plus rapide que 'file_get_contents()'. Une simple chaîne de 4 lettres a pris environ 10 secondes avec elle, tandis que la boucle a pris un ~ 1 seconde max plus raisonnable. –

+0

@pgmann es-tu sûr de ce résultat? ce n'est pas conforme aux autres statistiques avec ce qui a été cité. En effet, CURL est plus rapide, mais il ne devrait pas être beaucoup plus rapide. Peut-être que cette baisse du temps de réponse est venue de la mise en cache côté serveur de certaines ressources, etc? Peut-être que vous devriez répéter le test? –

8

si votre configuration php permet fopen sur les URL, vous pouvez aussi fopen simplement l'URL avec le get arguments dans la chaîne (par exemple http://example.com?variable=value)

Modifier: Relecture de la question Je ne suis pas certain si vous cherchez à transmettre des variables ou pas - si vous n'êtes pas vous pouvez simplement envoyer la demande fenetre containg http://example.com/filename.xml - N'hésitez pas à ignorer la partie variable = valeur

17

Rappelez-vous que si vous utilisez un proxy que vous devez faire un petit truc dans votre code php:

(PROXY WITHOUT AUTENTICATION EXAMPLE) 

<?php 
$aContext = array(
    'http' => array(
     'proxy' => 'proxy:8080', 
     'request_fulluri' => true, 
    ), 
); 
$cxContext = stream_context_create($aContext); 

$sFile = file_get_contents("http://www.google.com", False, $cxContext); 

echo $sFile; 
?> 
2

En revanche, en utilisant l'API REST d'autres serveurs sont très populaires en PHP. Supposons que vous cherchiez un moyen de rediriger certaines requêtes HTTP vers l'autre serveur (par exemple obtenir un fichier xml). Voici un package PHP pour vous aider:

https://github.com/romanpitak/PHP-REST-Client 

Ainsi, obtenir le fichier xml:

$client = new Client('http://example.com'); 
$request = $client->newRequest('/filename.xml'); 
$response = $request->getResponse(); 
echo $response->getParsedResponse(); 
Questions connexes