La requête HTTP PHP ignore les paramètres
P粉765570115
P粉765570115 2024-04-05 10:54:48
0
1
3705

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粉765570115
P粉765570115

répondre à tous(1)
P粉827121558

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal