一、curl本地服務(wù)器需要DNS解析域名
在使用 curl 命令發(fā)送請求到域名地址,本地服務(wù)器需要進行 DNS 解析以獲取域名對應(yīng)的 IP 地址,否則,curl 命令將無法建立與目標服務(wù)器的連接。當使用 curl 命令發(fā)送請求時,curl 會嘗試自動解析所提供的 URL 以獲取 IP 地址。如果 DNS 解析成功,curl 將使用獲取到的 IP 地址建立連接。如果 DNS 解析失敗,curl 將無法連接到目標服務(wù)器。
因此,為確保 curl 命令在本地服務(wù)器上正常工作,請確保您的服務(wù)器可以進行 DNS 解析??梢栽诮K端上使用以下命令來檢查您的服務(wù)器是否可以進行 DNS 解析:
ping example.com
其中,“example.com” 是您需要測試的域名。如果命令能夠成功進行 DNS 解析,則您的本地服務(wù)器可以成功解析域名。
二、如何排查錯誤原因
使用curl_error($curlHandle)排查錯誤原因
$host = "http://example.com/";
$curlHandle = curl_init($host);
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
curl_exec($curlHandle);
if (curl_errno($curlHandle)) {
echo 'Error: ' . curl_error($curlHandle);
}
curl_close($curlHandle);
錯誤提示:
Could not resolve: example.com (Could not contact DNS servers)
“Could not resolve: example.comn (Timeout while contacting DNS servers)”錯誤提示表示無法解析服務(wù)器的 DNS,可能是服務(wù)器 DNS 配置錯誤或網(wǎng)絡(luò)連接問題所致。您可以通過以下方法來進行排查和解決:
- 檢查 DNS 設(shè)置:登錄到您的服務(wù)器,查看 DNS 設(shè)置是否正確??梢允褂靡韵旅顏頇z查 DNS 服務(wù)商提供的 DNS 服務(wù)器地址是否正確:
cat /etc/resolv.conf
如果 DNS 設(shè)置正確,您可以嘗試更新 DNS 緩存并重新啟動服務(wù)來解決問題:
sudo systemctl restart network
sudo systemctl restart named
-
檢查網(wǎng)絡(luò)連接:檢查服務(wù)器的網(wǎng)絡(luò)連接是否正常??梢允褂靡韵旅顏頊y試連接是否正常:
ping www.lockdata.cn
如果存在網(wǎng)絡(luò)連接問題,可能需要聯(lián)系網(wǎng)絡(luò)管理員解決。
-
檢查防火墻和代理:檢查服務(wù)器上的防火墻和代理設(shè)置,確保 DNS 請求未被防火墻或代理攔截??梢試L試暫時關(guān)閉防火墻或代理,來確認是否影響 DNS 查詢。
-
使用其他 DNS 服務(wù)器:如果您無法證實自己的 DNS 服務(wù)商的可用性,可以嘗試使用其他 DNS 服務(wù)商提供的 DNS 服務(wù)器地址。
三、無法解析 DNS的程序升級方案
在 PHP 服務(wù)器上使用 curl 發(fā)送請求時,如果由于某些原因無法解析 DNS,可以使用以下方法來避免堵塞:
-
設(shè)置 CURLOPT_TIMEOUT:使用 CURLOPT_TIMEOUT 來設(shè)置超時時間,如果 curl 請求超時,將自動中止連接。使用以下代碼設(shè)置 CURLOPT_TIMEOUT:
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
在這個例子中,超時時間被設(shè)置為 10 秒??梢詫⑦@個值調(diào)整為更適合您的需求的值。
-
設(shè)置 CURLOPT_CONNECTTIMEOUT:使用 CURLOPT_CONNECTTIMEOUT 來設(shè)置連接超時時間,如果 curl 連接超時,將自動中止連接。使用以下代碼設(shè)置 CURLOPT_CONNECTTIMEOUT:
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
在這個例子中,連接超時時間被設(shè)置為 5 秒。同樣,可以將這個值調(diào)整為更適合您的需求的值。
-
設(shè)定 DNS 解析:如果 DNS 解析過慢或失敗導(dǎo)致的 curl 堵塞問題仍然存在,可以嘗試手動設(shè)定 DNS 解析??梢允褂靡韵麓a來設(shè)置 DNS 解析:
curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 3600); curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
在這個例子中,DNS 解析緩存被設(shè)置為 3600 秒。此外,CURL_IPRESOLVE_V4 被用來指定僅使用 IPv4 地址。
四、寶塔配置DNS的操作方法
1.etc/resolv.conf
2.通過GUI界面
上面的配置方式是一樣的效果。文章來源:http://www.zghlxwxcb.cn/news/detail-484321.html
@漏刻有時文章來源地址http://www.zghlxwxcb.cn/news/detail-484321.html
到了這里,關(guān)于php通過cURL爬取數(shù)據(jù)(3):CURLINFO_HTTP_CODE返回0的排查和解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!