最近在使用php curl時(shí),遇到了一個(gè)問(wèn)題:curl返回了一個(gè)空的response。這個(gè)問(wèn)題可能出現(xiàn)在很多情況下,比如服務(wù)端返回的response為空,curl請(qǐng)求參數(shù)有誤等等,接下來(lái)我們來(lái)一一分析。
首先,如果服務(wù)端返回了一個(gè)空的response,就需要檢查服務(wù)端代碼是否有誤。最好先使用其他工具(比如postman)來(lái)驗(yàn)證請(qǐng)求是否成功并返回了正確的response。如果驗(yàn)證成功,則可以考慮檢查php curl的設(shè)置,我們可以嘗試修改curl選項(xiàng),如設(shè)置User-Agent,或者增加超時(shí)時(shí)間等等。
其次,如果curl請(qǐng)求參數(shù)有誤,那么也會(huì)出現(xiàn)curl返回空的情況。比如請(qǐng)求的url不正確、請(qǐng)求的method被限定等等。下面是一個(gè)請(qǐng)求url錯(cuò)誤的示例:
$url = "htt://www.example.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
在這個(gè)例子中,我們故意將url格式修改為了錯(cuò)誤的格式,這時(shí)候curl返回了一個(gè)空的response,我們可以通過(guò)curl_errno函數(shù)來(lái)查看錯(cuò)誤碼,如下所示:$url = "htt://www.example.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
if($result === false) {
echo curl_error($ch);
} else {
echo $result;
}
curl_close($ch);
運(yùn)行后我們可以得到如下錯(cuò)誤信息:CURLE_URL_MALFORMAT
這時(shí)候我們就可以根據(jù)錯(cuò)誤信息來(lái)調(diào)整curl請(qǐng)求參數(shù)。
最后,如果以上兩個(gè)情況都沒有發(fā)生,那么我們可以考慮使用curl_debug函數(shù)來(lái)查看請(qǐng)求和響應(yīng)的詳細(xì)信息,如下所示:$url = "http://www.example.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
$result = curl_exec($ch);
if($result === false) {
echo curl_error($ch);
} else {
echo $result;
}
curl_close($ch);
curl_debug函數(shù)會(huì)輸出一堆詳細(xì)的請(qǐng)求和響應(yīng)信息,我們可以根據(jù)這些信息來(lái)判斷問(wèn)題出在哪里。
總之,當(dāng)我們遇到curl返回空的情況時(shí),應(yīng)該及時(shí)排查問(wèn)題,不要等到錯(cuò)誤發(fā)生才來(lái)修復(fù)。我們可以從服務(wù)端代碼、curl請(qǐng)求參數(shù)設(shè)置、使用curl_debug函數(shù)等多個(gè)方面入手來(lái)定位問(wèn)題。上一篇css3 單邊圓角