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: chunkedDengan 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 PHPMendapatkan 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
Oleh. Yakub
Diedit. 12-04-2021 11. 12
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 = "//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 = "//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
//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 0Bagikan dengan temanmu
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
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
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