Cara mendapatkan header respons di php

Dengan metode curl_setopt(), ketika CURLOPT_HEADER disetel ke true, curl_exec  akan menampilkan tajuk respons. Saat ini, jika CURLOPT_NOBODY disetel ke false, curl_setopt() akan mengembalikan header respons dan badan konten, jika tidak, hanya header respons yang akan dikembalikan

Kita dapat menggunakan metode curl_getinfo($ch, CURLINFO_HEADER_SIZE)_ untuk mengembalikan ukuran total semua header yang diterima

Keluaran

HTTP/1.1 200 OK
Date: Tue, 28 Apr 2020 15:11:27 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Set-Cookie: 1P_JAR=2020-04-28-15; expires=Thu, 28-May-2020 15:11:27 GMT; path=/; domain=.google.com; Secure
Set-Cookie: NID=203=DasuCttFxUVDirSokzwSf91r3PD60lDxlFogt2-rg5m0BCbhSeCpWcIlJVAmuLiDUkXmBTXuVbKEcP8gT0ifJzTu1MW-9UfriAyIqPESXl2H6fOsb9mvDZH8ng4Nb_YQk4Xv1uMFpCMiVf6GSHZS7dje2cjq1qvgyFiQfb3bOTA; expires=Wed, 28-Oct-2020 15:11:27 GMT; path=/; domain=.google.com; HttpOnly
Alt-Svc: quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,h3-T050=":443"; ma=2592000
Accept-Ranges: none
Vary: Accept-Encoding
Transfer-Encoding: chunked

Dengan opsi CURLOPT_HEADERFUNCTION_, kita dapat mengatur fungsi callback

Keluaran

Array
(
    [date] => Array
        (
            [0] => Tue, 28 Apr 2020 15:12:50 GMT
        )

    [expires] => Array
        (
            [0] => -1
        )

    [cache-control] => Array
        (
            [0] => private, max-age=0
        )

    [content-type] => Array
        (
            [0] => text/html; charset=ISO-8859-1
        )

    [p3p] => Array
        (
            [0] => CP="This is not a P3P policy! See g.co/p3phelp for more info."
        )

    [server] => Array
        (
            [0] => gws
        )

    [x-xss-protection] => Array
        (
            [0] => 0
        )

    [x-frame-options] => Array
        (
            [0] => SAMEORIGIN
        )

    [set-cookie] => Array
        (
            [0] => 1P_JAR=2020-04-28-15; expires=Thu, 28-May-2020 15:12:50 GMT; path=/; domain=.google.com; Secure
            [1] => NID=203=ZC5X9W1OFIFk7p_y1HUQ1ZhluIAq1QMJcoiaWNvjtggga9w0By1ULn01BaSxfswmYixQ8arShOwTpHMWyDRXu6vy5xdS19FmFYLyUsdz0n5wOs9_dkb4xBPLOc4SRKdZN7QhcgS8sMVwugrM-CEyg2ENJq_t__UJlwM2cgOdyfg; expires=Wed, 28-Oct-2020 15:12:50 GMT; path=/; domain=.google.com; HttpOnly
        )

    [alt-svc] => Array
        (
            [0] => quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,h3-T050=":443"; ma=2592000
        )

    [accept-ranges] => Array
        (
            [0] => none
        )

    [vary] => Array
        (
            [0] => Accept-Encoding
        )

    [transfer-encoding] => Array
        (
            [0] => chunked
        )

)
_

❮ Referensi Jaringan PHP

Contoh

Kembalikan daftar tajuk respons yang dikirim

setcookie("TestCookie", "SomeValue");
header("Uji-Sampel-X. foo");
header("Tipe konten. teks/polos");
?>


var_dump(headers_list());
?>


Output dari kode di atas bisa jadi

larik(4)
{
[0]=> string(23) "X-Powered-By. PHP/7. 1. 1"
[1]=> string(19) "Set-Cookie. TestCookie = Beberapa Nilai"
[2]=> string(18) "X-Sample-Test. foo"
[3]=> string(24) "Content-type. teks/biasa"
}


Definisi dan Penggunaan

Fungsi headers_list() mengembalikan daftar header respons untuk dikirim ke browser

Tip. Untuk menentukan apakah header sudah dikirim atau belum, gunakan fungsi headers_sent()

Sintaksis



Detail Teknis

Nilai Pengembalian. Susunan header yang diindeks secara numerik pada versi successPHP. 5. 0+
❮ Referensi Jaringan PHP

Mendapatkan header respons HTTP dengan cURL di PHP tidaklah mudah. Tidak ada cara bawaan untuk melakukan ini, tetapi kami masih dapat memotong header dari pesan tanggapan, jika CURLOPT_HEADER benar

47153 dilihat

Cara mendapatkan header respons di php

Oleh. Yakub

Diedit. 12-04-2021 11. 12

Cara mendapatkan header respons di php

Ketika permintaan HTTP telah diterima oleh server, biasanya respons dikirim kembali ke klien, dan respons server biasanya terdiri dari dua bagian;

Bagian tajuk respons berisi semua tajuk respons, termasuk cookie (jika ada) dan informasi tentang jenis mime konten. Badan respons berisi konten, yang harus cocok dengan tipe ranjau di header. Misalnya, tipe pantomim yang umum mungkin berupa teks/html untuk halaman HTML, dan teks/css untuk Lembar Gaya eksternal

Untuk menampilkan tajuk tanggapan atas permintaan tertentu, kita cukup memotong tajuk menggunakan kombinasi opsi dan fungsi. Penjelasan lebih rinci tentang ini tersedia di bagian artikel selanjutnya, bagi mereka yang tertarik

Contoh lengkap cepat disertakan di bawah ini

$url = "https://beamtic.com/api/user-agent";

$ch = curl_init();

  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HEADER, 1);

  $response = curl_exec($ch);
  
  // Retudn headers seperatly from the Response Body
  $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
  $headers = substr($response, 0, $header_size);
  $body = substr($response, $header_size);
  
curl_close($ch);

header("Content-Type:text/plain; charset=UTF-8");
echo $headers;
echo $body;

Di atas akan menampilkan sesuatu seperti

HTTP/1.1 200 OK
date: Sun, 21 Feb 2021 12:11:57 GMT
server: 0
cache-control: no-cache
expires: -1
allow: GET, HEAD
strict-transport-security: max-age=31536000; includeSubDomains
vary: Accept-Encoding
content-encoding: br
x-frame-options: SAMEORIGIN
content-length: 10252
content-type: text/html; charset=utf-8

Kode respons selalu merupakan baris pertama yang dikembalikan di kepala respons

Mendapatkan header sebagai kunci. pasangan nilai

Seperti yang dibahas dalam artikel parsing response headers di PHP, kita juga bisa membuat associative array yang berisi key. pasangan nilai. Karena kita sudah mendapatkan headernya, kita bisa melakukannya seperti ini

// Convert the $headers string to an indexed array
$headers_indexed_arr = explode("\r\n", $headers);

// Define as array before using in loop
$headers_arr = array();
// Remember the status message in a separate variable
$status_message = array_shift($headers_indexed_arr);

// Create an associative array containing the response headers
foreach ($headers_indexed_arr as $value) {
  if(false !== ($matches = explode(':', $value, 2))) {
    $headers_arr["{$matches[0]}"] = trim($matches[1]);
  }                
}

// Show that it works
header('content-type: text/plain; charset=utf-8');
print_r($headers_arr);exit();
_

Mengambil header respons

Tidak ada cara bawaan untuk hanya mengembalikan header respons menggunakan cURL di PHP. Namun, kami masih dapat "memotong" mereka dari respons penuh. Untuk melakukannya, pertama-tama kita menentukan ukuran header respons, lalu memotongnya dari respons menggunakan fungsi substr()

Pertama, kami menetapkan opsi CURLOPT_HEADER menjadi benar. Melakukan hal ini akan menyertakan tajuk dalam respons yang diunduh oleh cURL. Selanjutnya, kita perlu memotong header

Dengan menggunakan metode ini, kita dapat mengembalikan bagian tubuh dan header dari respons. Namun, sebelum kita dapat memisahkan komponen respons, kita perlu mendapatkan ukuran header. Ini dapat dilakukan dengan menggunakan curl_getinfo() dengan opsi CURLINFO_HEADER_SIZE, seperti yang ditunjukkan di bawah ini

$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);

Terakhir, kita dapat menggunakan nilai yang dikembalikan oleh curl_getinfo() dengan substr() untuk memisahkan header dari pesan respons

$headers = substr($response, 0, $header_size);
$body = substr($response, $header_size);
_

Buat array yang berisi setiap header

Untuk bekerja lebih baik dengan header individu, kita harus menempatkannya dalam array. Header HTTP dipisahkan oleh Carriage Return dan Line Feed, juga dikenal sebagai CRLF (Terkadang juga direpresentasikan sebagai. [CR][LF]). Mengetahui hal ini, kita dapat membuat array dari header mentah menggunakan fungsi PHP explosion()

$headers_arr = explode("\r\n", $headers); // The separator used in the Response Header is CRLF (Aka. \r\n)
print_r($headers_arr); // Shows the content of the $headers_arr array

Seperti yang Anda lihat, kami juga memiliki beberapa entri kosong. Untuk menghapusnya, kita bisa meneruskan array ke fungsi array_filter()

$headers_arr = array_filter($headers_arr);
_

Akhirnya, kita dapat dengan mudah mengerjakan array dalam satu lingkaran

$html = '';
foreach ($headers as &$value) {
    $html .= '<li>' . $value . '</li>';
}
$html = '<ol>' . $html . '</ol>';
_

Contoh selesai

// URL to fetch
$url = "https://beamtic.com/";

$ch = curl_init();

  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HEADER, 1);

  $response = curl_exec($ch);
  
  // Retudn headers seperatly from the Response Body
  $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
  $headers = substr($response, 0, $header_size);
  $body = substr($response, $header_size);
  
curl_close($ch);

$headers = explode("\r\n", $headers); // The seperator used in the Response Header is CRLF (Aka. \r\n) 

$headers = array_filter($headers);

$html = '';
foreach ($headers as &$value) {
    $html .= '<li>' . $value . '</li>';
}
$html = '<ol>' . $html . '</ol>';

header("Content-Type:text/html; charset=UTF-8");
echo $html;

Peralatan

  • Agen Pengguna Anda
  • Tajuk Permintaan Anda

Anda dapat menggunakan titik akhir API berikut untuk tujuan pengujian

https://beamtic.com/api/user-agent
HTTP/1.1 200 OK
date: Sun, 21 Feb 2021 12:11:57 GMT
server: 0
cache-control: no-cache
expires: -1
allow: GET, HEAD
strict-transport-security: max-age=31536000; includeSubDomains
vary: Accept-Encoding
content-encoding: br
x-frame-options: SAMEORIGIN
content-length: 10252
content-type: text/html; charset=utf-8
0

Bagikan dengan temanmu

Beritahu kami apa yang kamu pikirkan
Cara mendapatkan header respons di php
Alonso Quinones

Panduan yang bagus, terima kasih
Mungkin Anda juga bisa menambahkan cara membagi hasilnya menjadi pasangan kunci/nilai -, karena saat ini setiap objek array adalah satu string panjang
/Salam, Alonso

Cara mendapatkan header respons di php
Timilica

Halo,
Saya memiliki masalah besar dengan cURL yang mencoba melewati halaman login
Saya telah menggunakan semua opsi cURL yang diperlukan (CURLOPT_COOKIEJAR, CURLOPT_COOKIEFILE, CURLOPT_FOLLOWLOCATION) agar cURL melewati halaman login tetapi tidak berhasil. Saya mencoba meneruskan login di http. //aplikasi. allogalogistics. ro dan dapatkan beberapa catatan di halaman lain. Halaman login memiliki pengalihan

Saya membuat req POST di halaman login dan saya menyimpan cookie di cookie. txt dengan CURLOPT_COOKIEJAR dan CURLOPT_COOKIEFILE. Saya melihat bahwa setelah req POST, req GET lainnya dimulai dalam proses login. Saya mencoba semua yang saya baca tetapi yang bisa saya lihat dari cURL adalah halaman login dengan nama pengguna/kata sandi kosong (tidak dicatat) meskipun responsnya 200 OK

Bisakah Anda memberi saya saran?

Salam

Cara mendapatkan header respons di php
Lawrence Kennon

Ini adalah artikel yang bermanfaat. Saya merangkum banyak kode ini ke dalam fungsi yang saya gunakan di banyak skrip baris perintah di Mac untuk sejumlah tujuan di tempat kerja. Terima kasih

Bagaimana cara memeriksa tajuk dari respons di PHP?

Hal ini dapat dilakukan dengan CURLINFO_HEADER_SIZE parameter dalam fungsi curl_getinfo() , yang akan memberi tahu kita panjang header dan kita dapat .

Bagaimana cara mendapatkan detail tajuk di PHP?

PHP. get_headers() Fungsi . Parameter. Fungsi ini menerima tiga parameter seperti yang disebutkan di atas dan dijelaskan di bawah ini. $url. Ini adalah parameter wajib dari tipe string. Ini mendefinisikan URL target.

Bagaimana cara mendapatkan tajuk respons?

Gunakan metode GetHeader() dan GetHeaders() dari objek respons untuk mendapatkan satu nilai header atau daftar lengkap header . Ini dapat digunakan pada objek permintaan serta respons.

Bagaimana cara mengatur header respons di PHP?

Untuk versi PHP 4. 0. Untuk mengirim kode respons HTTP, kita perlu menyusun kode respons. Untuk melakukannya, gunakan fungsi header() . Fungsi header() berisi kasus penggunaan khusus yang dapat mendeteksi baris respons HTTP dan menggantinya dengan yang khusus. tajuk ("HTTP/1. 1 404 Tidak Ditemukan");