Jika Anda terhubung dengan server, maka Anda bisa mendapatkan kode pengembalian darinya, jika tidak maka akan gagal dan Anda mendapatkan 0. Jadi jika Anda mencoba menyambung ke "www.google.com/lksdfk" Anda akan mendapatkan kode pengembalian 400, jika Anda pergi langsung ke google.com, Anda akan mendapatkan 302 (dan kemudian 200 jika Anda meneruskan ke halaman berikutnya ... baik saya lakukan karena meneruskan ke google.com.br, jadi Anda mungkin tidak mendapatkannya), dan jika Anda pergi ke "googlecom" Anda akan mendapatkan 0 (host tidak ditemukan), jadi dengan yang terakhir, tidak ada orang yang mengirim kode kembali.
Diuji menggunakan kode di bawah ini.
<?php
$html_brand = "www.google.com";
$ch = curl_init();
$options = array(
CURLOPT_URL => $html_brand,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_ENCODING => "",
CURLOPT_AUTOREFERER => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_MAXREDIRS => 10,
);
curl_setopt_array( $ch, $options );
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ( $httpCode != 200 ){
echo "Return code is {$httpCode} \n"
.curl_error($ch);
} else {
echo "<pre>".htmlspecialchars($response)."</pre>";
}
curl_close($ch);
Coba ini setelah curl_exec untuk melihat apa masalahnya:
Jika itu mencetak sesuatu seperti 'cacat' kemudian periksa format URL Anda.
sumber
periksa curl_error setelah curl_getinfo untuk mengetahui kesalahan tersembunyi.
sumber
Seperti yang dikatakan di sini dan di bawah ini, permintaan yang gagal ( yaitu server tidak ditemukan ) mengembalikan false, tidak ada kode status HTTP, karena balasan tidak pernah diterima.
Panggil
curl_error()
.sumber
Saya memiliki masalah yang sama dan dalam kasus saya ini karena fungsi curl_exec dinonaktifkan di php.ini. Periksa log:
Solusinya adalah menghapus curl_exec dari fungsi yang dinonaktifkan di php.ini pada file konfigurasi server.
sumber
Apa persisnya konten yang Anda berikan ke $ html_brand?
Jika memiliki sintaks URL yang tidak valid, kemungkinan besar Anda akan mendapatkan kode HTTP 0.
sumber
Coba ini:
sumber
Alasan lain PHP mengembalikan kode http 0 adalah batas waktu. Dalam kasus saya, saya memiliki konfigurasi berikut:
curl_setopt ($ http, CURLOPT_TIMEOUT_MS, 500);
Ternyata request ke endpoint yang saya tunjuk selalu membutuhkan waktu lebih dari 500 ms, selalu time out dan selalu mengembalikan kode http 0.
Jika Anda menghapus pengaturan ini (CURLOPT_TIMEOUT_MS) atau memberikan nilai yang lebih tinggi (dalam kasus saya 5000), Anda akan mendapatkan kode http yang sebenarnya, dalam kasus saya 200 (seperti yang diharapkan).
Lihat https://www.php.net/manual/en/function.curl-setopt.php
sumber
Jika Anda menggunakan selinux, itu mungkin karena batasan keamanan. Coba atur ini sebagai root:
sumber