2010-06-13 2 views
14

Je dois effectuer une requête get et envoyer des en-têtes avec. Que puis-je utiliser pour faire cela?Demande PHP GET, envoi d'en-têtes

L'en-tête principal que je dois définir est celui du navigateur. Y a-t-il un moyen facile de faire ceci?

+1

Vous écrivez du code PHP pour exécuter la requête GET, ou voulez-vous utiliser votre navigateur (ou autre chose) pour simuler différents agents utilisateurs demandant vos pages PHP? – grossvogel

+0

J'écris du code pour effectuer la requête et stocker la réponse sous forme de chaîne –

+0

De quel entête de "browser" parlez-vous? Vous devez retourner la chaîne de l'agent utilisateur –

Répondre

29

Si vous utilisez cURL, vous pouvez utiliser curl_setopt ($handle, CURLOPT_USERAGENT, 'browser description') pour définir l'en-tête de l'agent utilisateur de la demande.

Si vous utilisez file_get_contents, consultez ce tweak d'un exemple sur la page de manuel pour file_get_contents:

// Create a stream 
$opts = array(
    'http'=>array(
    'method'=>"GET", 
    'header'=>"Accept-language: en\r\n" . 
       "Cookie: foo=bar\r\n" . 
       "User-agent: BROWSER-DESCRIPTION-HERE\r\n" 
) 
); 

$context = stream_context_create($opts); 

// Open the file using the HTTP headers set above 
$file = file_get_contents('http://www.example.com/', false, $context); 
+0

Merci résolu :) –

+0

Merci pour cette! travaillé parfait. – jones

+0

Puis-je faire une requête HTTPS sans cela? –

-2

Vous pouvez utiliser la fonction header pour que, par exemple:

header('Location: http://www.example.com?var=some_value'); 

Notez que:

Rappelez-vous que la tête() doit être appelé avant toute sortie réelle est envoyée , soit par des balises HTML normales, lignes vides dans un fichier, ou à partir de PHP. include(), ou require(), functions, ou une autre fonction d'accès aux fichiers, et ont les espaces ou les lignes vides qui sont affichés avant que header() soit appelé. Le même problème existe lors de l'utilisation d'un seul fichier PHP/HTML .

+0

Je dois stocker la réponse de la requête dans une chaîne de caractères pour le traitement, donc je ne peux pas utiliser cette méthode –

+0

@ James Jeffery: Je ne comprends pas ce que vous voulez dire par là, pourriez-vous être plus précis ou ajouter plus de détails à votre question? Merci – Sarfraz

+0

Essayez-vous d'utiliser AJAX? Ou accéder aux variables PHP avec Javascript? –

1

Si vous demandez une page, utilisez cURL.

Pour définir les en-têtes (dans ce cas, l'en-tête User-Agent dans la requête HTTP, vous pouvez utiliser cette syntaxe:

<?php 
$curl_h = curl_init('http://www.example.com/'); 

curl_setopt($curl_h, CURLOPT_HTTPHEADER, 
    array(
     'User-Agent: NoBrowser v0.1 beta', 
    ) 
); 

# do not output, but store to variable 
curl_setopt($curl_h, CURLOPT_RETURNTRANSFER, true); 

$response = curl_exec($curl_h);