Rumah  >  Soal Jawab  >  teks badan

Permintaan HTTP PHP mengabaikan parameter

Sebelum saya mula bertanya, saya harus menyatakan bahawa saya sedang belajar semula PHP setelah lama meninggalkannya. Sila berlembut. Selain itu, saya tahu saya boleh menggunakan perpustakaan seperti curl untuk melakukan beberapa perkara ini, tetapi saya ingin memahami cara PHP itu sendiri berfungsi.

Saya cuba menyerahkan permintaan http GET ke Microsoft API (Platform Identiti). Inilah kod saya:

<?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;
?>

Apabila saya cuba melaksanakan kod di atas, saya mendapat: Coretan ralat

Sebaliknya, menggunakan kod berikut, permintaan http berfungsi dengan baik:

<?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;
?>

Bolehkah sesiapa memberikan pandangan tentang mengapa contoh pertama gagal dan contoh kedua berjaya? Fikiran saya mesti ada beberapa jenis ralat sintaks. Terima kasih terlebih dahulu.

P粉765570115P粉765570115170 hari yang lalu3526

membalas semua(1)saya akan balas

  • P粉827121558

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

    content 参数用于请求正文,适用于 POST 和 PUT 请求。但 GET 参数不会出现在正文中,而是直接出现在 URL 中。因此,您的第一个示例只是向基本 URL 发出 GET 请求,根本不带任何参数。另请注意,method Parameter telah lalai untuk GET supaya anda boleh melangkau keseluruhan bit strim.

    Anda boleh membina URL anda seperti ini:

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

    Kemudian:

    $content = file_get_contents($url);

    Atau susun semuanya dalam satu ayat:

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

    Atau gunakan $url来提供curl_init() atau Guzzle atau serupa.

    balas
    0
  • Batalbalas