Bagaimana untuk menyelesaikan masalah php curl tidak boleh merangkak data
Dengan perkembangan pesat Internet, teknologi crawler telah menjadi semakin matang. Apabila membangunkan perangkak, php curl ialah alat perangkak klasik. Walau bagaimanapun, sesetengah pembangun mungkin menghadapi situasi di mana data tidak boleh ditangkap apabila menggunakan php curl Apakah yang perlu mereka lakukan dalam kes ini? Artikel ini akan memperkenalkan beberapa sebab dan penyelesaian biasa mengapa php curl tidak dapat menangkap data.
1. Tiada maklumat pengepala ditambahkan
Hampir semua tapak web akan menyemak permintaan http Jika maklumat pengepala tiada, akses mungkin akan dinafikan oleh pelayan. Penyelesaiannya adalah untuk menetapkan maklumat pengepala dalam php curl. Anda boleh menggunakan fungsi curl_setopt untuk menetapkannya, seperti berikut:
$header = array( 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' ); curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
2. Lompatan tidak diproses
Apabila menggunakan php curl untuk merangkak halaman web, beberapa tapak web akan melompat dan curl akan menamatkan operasi secara lalai. Penyelesaiannya adalah dengan menambah pilihan CURLOPT_FOLLOWLOCATION, seperti berikut:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
3 Kuki yang tidak diproses
Banyak tapak web menggunakan kuki untuk merekodkan tingkah laku pengguna Jika kuki tidak diproses, kandungan yang ditangkap mungkin Sesuatu berlaku salah. Penyelesaiannya ialah menggunakan fungsi curl_setopt untuk menetapkan pilihan CURLOPT_COOKIEFILE dan CURLOPT_COOKIEJAR, seperti berikut:
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
di mana $cookie ialah laluan fail yang digunakan untuk menyimpan kuki yang belum tamat tempoh.
4. Tamat masa tidak ditetapkan
Apabila merangkak halaman web, jika masa respons pelayan terlalu lama, php curl mungkin kekal dalam keadaan menunggu. Untuk mengelakkan situasi ini, anda boleh menggunakan fungsi curl_setopt untuk menetapkan pilihan CURLOPT_TIMEOUT dan CURLOPT_CONNECTTIMEOUT, seperti berikut:
curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
Antaranya, pilihan CURLOPT_TIMEOUT mewakili tamat masa keseluruhan permintaan, dalam saat pilihan CURLOPT_CONNECTTIMEOUT tamat masa untuk menyambung ke pelayan, Unit adalah saat.
5. Tidak menggunakan proksi yang betul
Untuk menghalang akses perangkak, sesetengah tapak web akan menyekat permintaan daripada IP yang sama. Penyelesaiannya adalah dengan menggunakan proksi. Gunakan fungsi curl_setopt untuk menetapkan pilihan CURLOPT_PROXY dan pilihan CURLOPT_PROXYPORT, seperti berikut:
curl_setopt($ch, CURLOPT_PROXY, '代理服务器地址'); curl_setopt($ch, CURLOPT_PROXYPORT, '代理服务器端口');
6 Pengesahan SSL tidak dihidupkan
Sesetengah tapak web perlu menggunakan protokol penyulitan SSL untuk penghantaran data. Jika pengesahan SSL tidak dihidupkan, php curl Data tidak akan ditangkap. Penyelesaiannya adalah dengan menggunakan fungsi curl_setopt untuk menetapkan pilihan CURLOPT_SSL_VERIFYPEER dan pilihan CURLOPT_SSL_VERIFYHOST, seperti berikut:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
Antaranya, pilihan CURLOPT_SSL_VERIFYPEER menunjukkan sama ada untuk mengesahkan sijil setara, menggunakan CURLOPT_SSLLOSLOS; pilihan menunjukkan sama ada untuk menyemak nama biasa dalam sijil dan Sama ada uri sepadan, gunakan palsu untuk menunjukkan tiada semakan.
Di atas ialah beberapa sebab dan penyelesaian biasa mengapa php curl tidak dapat menangkap data. Apabila kita menghadapi kegagalan merangkak, kita perlu menyelesaikan masalah langkah demi langkah dan menggunakan pelbagai kaedah untuk menyelesaikan masalah. Saya percaya bahawa selagi kami terus bekerja keras, kami boleh menguasai teknologi php curl crawler dan berjaya menyelesaikan tugas pembangunan crawler kami.
Atas ialah kandungan terperinci php curl tidak boleh merangkak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!