Maison > Questions et réponses > le corps du texte
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粉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.