Header proxy PHP cURL: CONNECT versus respons tujuan
Pisahkan header CONNECT, autentikasi, pengalihan, dan respons akhir ketika transfer PHP cURL memakai proxy.
Kumpulkan baris header secara terpisah dari isi respons. Transfer melalui proxy dapat mengirimkan header CONNECT, autentikasi, pengalihan, dan respons tujuan dalam satu operasi:
$headerLines = [];
curl_setopt($handle, CURLOPT_HEADERFUNCTION,
function ($handle, $line) use (&$headerLines) {
$headerLines[] = $line;
return strlen($line);
}
);
Callback ini mempertahankan urutan baris mentah dan mengembalikan jumlah byte yang diterima. Ia menerima baris lengkap; tetapi belum mengelompokkannya menjadi respons atau memilih header situs web final.
Tafsirkan urutan sebagai blok
Baris status HTTP memulai blok respons, dan baris kosong mengakhiri header-nya. Pertahankan batas tersebut sebelum memilih respons tujuan final. Percobaan autentikasi perantara dan pengalihan masing-masing dapat menambah blok.
Trailer dapat datang kemudian melalui callback. Simpan status parser yang cukup untuk membedakannya dari header awal, alih-alih melampirkan setiap bidang berikutnya ke respons pertama.
Simpan atau tekan bukti terowongan
Baca CURLINFO_HTTP_CONNECTCODE secara terpisah untuk status CONNECT terowongan HTTPS. Terowongan yang diterima tidak membuktikan respons situs web yang berhasil.
Jika header CONNECT tidak diperlukan oleh pengumpul, CURLOPT_SUPPRESS_CONNECT_HEADERS mengatur pengirimannya ke keluaran header yang dikonfigurasi dan jalur callback. Periksa dukungan pada libcurl dan build PHP yang tertaut. Penekanan menyederhanakan pengumpulan tetapi menghapus bukti terowongan tingkat header yang dapat membantu diagnosis.
Jangan memulihkan isi dengan offset tetap atau dengan mencari tag HTML. Ukuran header bervariasi, respons perantara berbeda, dan isi bisa berupa biner atau kosong. Laporan bug lama yang spesifik untuk satu rilis tidak membenarkan offset yang ditebak.
Pisahkan penanganan isi, dan simpan galat transfer bersama tahapan respons yang teramati jika pengumpulan atau penguraian gagal. Itu membedakan callback yang terputus, data aplikasi yang cacat, dan pertukaran proxy yang ditolak.