Maison  >  Questions et réponses  >  le corps du texte

La requête HTTP PHP ignore les paramètres

Avant de commencer à demander, je dois mentionner que je réapprends PHP après une longue période d'absence. Soyez gentil s'il vous plait. De plus, je sais que je peux utiliser des bibliothèques comme curl pour effectuer certaines de ces choses, mais je veux comprendre comment fonctionne PHP lui-même.

J'essaie de soumettre une requête http GET à l'API Microsoft (Identity Platform). Voici mon code :

<?php
$data = array (
        'client_id' => '6731de76-14a6-49ae-97bc-6eba6914391e',
        'state' => '12345',
        'redirect_uri' => urlencode('http://localhost/myapp/permissions')
    );

    $streamOptions = array('http' => array(
        'method' => 'GET',
        'content' => $data
    ));

    $streamContext = stream_context_create($streamOptions);
    $streamURL = 'https://login.microsoftonline.com/common/adminconsent';
    $streamResult = file_get_contents($streamURL, false, $streamContext);
    echo $streamResult;
?>

Lorsque j'essaie d'exécuter le code ci-dessus, j'obtiens : Extrait d'erreur

Au lieu de cela, en utilisant le code suivant, la requête http fonctionne correctement :

<?php        
    $streamURL = 'https://login.microsoftonline.com/common/adminconsent?client_id=6731de76-14a6-49ae-97bc-6eba6914391e&state=12345&redirect_uri=http://localhost/myapp/permissions';
    $streamResult = file_get_contents($streamURL);
    echo $streamResult;
?>

Quelqu'un peut-il expliquer pourquoi le premier exemple échoue et le second réussit ? Je pense qu'il doit y avoir une sorte d'erreur de syntaxe. Merci d'avance.

P粉765570115P粉765570115219 Il y a quelques jours3624

répondre à tous(1)je répondrai

  • P粉827121558

    P粉8271215582024-04-06 09:01:08

    content 参数用于请求正文,适用于 POST 和 PUT 请求。但 GET 参数不会出现在正文中,而是直接出现在 URL 中。因此,您的第一个示例只是向基本 URL 发出 GET 请求,根本不带任何参数。另请注意,method Les paramètres sont par défaut sur GET afin que vous puissiez ignorer l'intégralité du flux.

    Vous pouvez créer votre URL comme ceci :

    $urlBase = 'https://login.microsoftonline.com/common/adminconsent';
    $data = [
        'client_id' => '...',
        'state' => '12345',
        'redirect_uri' => 'http://localhost/myapp/permissions',
    ];
    $url = $urlBase . '?' . http_build_query($data);

    Puis :

    $content = file_get_contents($url);

    Ou tout simplement regrouper le tout en une seule phrase :

    $content = file_get_contents(
        'https://login.microsoftonline.com/common/adminconsent?' .
        http_build_query([
            'client_id' => '...',
            'state' => '12345',
            'redirect_uri' => 'http://localhost/myapp/permissions',
        ])
    );

    Ou utilisez $url来提供curl_init() ou Guzzle ou similaire.

    répondre
    0
  • Annulerrépondre