[英]Catch CUrl Timout Exceptions with Guzzle
我正在嘗試為少數網站檢索 HTML。 我使用的是 PHP file_get_contents,它工作得非常好,但速度很慢而且有點受限,所以我決定嘗試 Guzzle。 不幸的是,我發現即使使用記錄在案的異常處理,也很難阻止 Guzzle 拋出異常。 我的代碼很簡單:
$websiteFQDN = 'http://acme.biz';
$client = new \GuzzleHttp\Client(['http_errors' => false,'verify' => false, 'connect_timeout' => 121 ]);
echo '<h3>'.$websiteFQDN.'</h3>';
try {
$res = $client->request('GET', $websiteFQDN);
echo '<p>Appears Successful</p>';
}
catch (RequestException $e){
echo '<p>Exception Caught</p>';
}
我不斷收到以下錯誤:
GuzzleHttp\Exception\ConnectException cURL error 28: Failed to connect to acme.biz port 80: Timed out (see https://curl.haxx.se/libcurl/c/libcurl-errors.html )
關於為什么上面沒有捕捉到異常並允許進程繼續的任何建議? 在我的測試中,它遍歷了大約 20 個域而沒有問題,但后來我得到了上面的錯誤並殺死了它。
Laravel 7.0 | 狂飲7.0.1 | PHP 7.2.5
有人建議嘗試 Laravel HTTP 客戶端,但不幸的是它遇到了同樣的問題,因為它使用 Guzzle,而 Guzzle 又似乎使用 CUrl,我所做的只是添加抽象層。 我用這段代碼試了一下:
$response = Http::withOptions(['verify' => false])->get($websiteFQDN);
if($response->successful()){
echo '<p>Appears Successful</p>';
}else{
echo '<p>Exception Caught</p>';
}
當我嘗試使用 Laravel HTTP vanilla 時,我收到“ cURL 錯誤 60: ZEA52C36244 ”25F91C2DCE2 錯誤 60: ZEA52C362440253C5F91C2DCE2錯誤。 我將“驗證”=> false Guzzle 選項添加到 HTTP 客戶端,該客戶端將其傳遞給 Guzze(就像我使用 Guzzle 時所做的那樣),解決了這個問題,並且它通過了更多域。 然后我得到錯誤: ConnectionException cURL 錯誤 28:無法連接到www.acme.biz端口 80:超時這是我在使用 Guzzle 時得到的
我假設必須有一種方法可以處理域列表並獲取他們的 HTML 沒有例外地殺死進程?
您正在使用Laravel 7.x 。
您也可以使用Laravel提供的這個HTTP-CLIENT 。 它還在后面使用Guzzle 。
使用這個外觀:
use Illuminate\Support\Facades\Http;
你可以簡單地像這樣寫請求。
Http::get([URL]);
在您的情況下,您可以修改它。
Http::get('http://acme.biz');
如果您想要 json 響應,您也可以這樣做:
$response = Http::get('http://acme.biz')->json();
return $response;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.