導航:首頁 > 編程語言 > phpcurl處理錯誤

phpcurl處理錯誤

發布時間:2024-09-22 22:52:56

⑴ 請問下php中如何處理這個curl_exec()的結果

可以使用 empty() 函數,
if ( empty( $data ) ) {
// 為空
} else {
// 不為空
}

如果是其他某種不明原因導致報錯,可以用異常機制,
try {
if ( !$data ) { // 這里的條件也可以用其他
throw new Exception ( 'error' );
} else {
echo ' success ';
}
} catch (Exception $e) {
echo ' error ';
}

⑵ PHP Curl出現403錯誤怎麼辦

使用curl抓網頁下來處理,為了穿牆方便,使用Privoxy作為代理,便於選擇哪些網站使用proxy、哪些不用。但今天卻遇到了奇怪的問題,訪問google這些網站居然都返回403錯誤,而訪問其他的一些網站沒事,如果設置為不使用proxy則都能正常訪問。
難道google就不讓用proxy連接么?顯然不可能,所以打開curl的信息輸出(curl_setopt($this->mSh,CURLOPT_VERBOSE,1);)看看,得到以下結果:
.代碼如下:
*Trying127.0.0.1...*connected
*Connectedto127.0.0.1(127.0.0.1)port8118(#0)
*EstablishHTTPproxytunneltowww..com:80
>CONNECTwww..com:80HTTP/1.0
Host:www..com:80
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)
Proxy-Connection:Keep-Alive
<HTTP/1.0403Connectionnotallowable
<X-Hint:,thenyouknowwhythishappens,-)
<
*TherequestedURLreturnederror:403
*
*Closingconnection#0
...Failed.
可以看到proxy伺服器工作正常,的確是返回了403錯誤,但原因肯定還在我這邊。終於,從網上(1of2,2of2)得到了點啟發──我使用的是proxytunnel而非proxy。
在代碼中,有這么一句:
.代碼如下:
curl_setopt($this->mSh,CURLOPT_HTTPPROXYTUNNEL,true);
curl_setopt($this->mSh,CURLOPT_PROXY,$phost);
php文檔中沒有詳細說明,不過mancurl中有詳細解釋,兩者都是代理,proxytunnel(-p參數)允許其他協議通過http代理傳輸,而proxy(-x參數)則只能走http協議。所以我猜測,google的伺服器和curl的proxytunnel不和,所以返回403。
禁用掉上面2行代碼的第一句後,curl訪問恢復正常。
比較奇怪的是,幾種操作系統下還不一樣,一台MACOSX就要顯式的禁用proxytunnel才可以,curl版本:
.代碼如下:
$curl--version
curl7.16.3(powerpc-apple-darwin9.0)libcurl/7.16.3OpenSSL/0.9.7lzlib/1.2.3
Protocols:
Features:GSS-
而另外一台ubuntu則完全不受影響,怎麼都能用,curl版本:
.代碼如下:
$curl--version
curl7.18.2(i486-pc-linux-gnu)libcurl/7.18.2OpenSSL/0.9.8gzlib/1.2.3.3libidn/1.10
Protocols:
Features:GSS-
MT主機上的centos也沒事,curl版本:
.代碼如下:
$curl--version
curl7.15.5(i686-redhat-linux-gnu)libcurl/7.15.5OpenSSL/0.9.8bzlib/1.2.3libidn/0.6.5
Protocols:
Features:GSS-
看來不完全是curl版本問題,MACOSX的確與眾不同啊。
還有一個原因也會導致curl返回403錯誤,如果設置了:
.代碼如下:
curl_setopt($ch,CURLOPT_NOBODY,true);
則需要緊跟著設置:
.代碼如下:
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'GET');
不然會因為http伺服器不允許HEAD命令而返回403錯誤。參考:TroublewithacURLrequestinPHP(forums.devshed.com/php-development-5/trouble-with-a-curl-request-in-php-445222.html)。MACOSX上curl之所以特殊,也不排除是這種原因

⑶ phpcurl遇到500會卡死

伺服器環境或者不支持的組件等原因。phpcurl遇到500卡死是因為伺服器環境或者不支持的組件等原因導致的500錯誤,這種情況下即使建立一個靜態頁面也會出現500錯誤。沒辦法補救。php curl就是php中的數據傳輸神器。

⑷ PHP的curl模擬·登錄老是失敗出現了405錯誤

405 是指請求的 URL 不支持請求的方法, htm(除偽靜態)是靜態頁面,是只能使用 get 方法的,而你要登錄,要用post,而你這里也確實是用的 post,那麼我覺得你應該是 URL 取錯了。像這種 post 的地址都要是有程序處理的,你再回去看看原來頁面中 form 上的 action 地址吧

⑸ PHP 用CURL 抓取錯誤提示:Recv failure: Connection was aborted 怎麼解決 求助各位大神

一、原因分析

web站點目前主要分為http和https兩種協議,其中https類型的網站都是通過ssl協議+http協議的,是目前最安全的網站協議,訪問此類網站的時候,會走ssl協議,驗證訪問者的證書,檢測是否安全。

通過curl訪問此類網站也是如此流程,但是curl中需要添加相應的參數,繞過ssl證書的驗證,才可以正常訪問,如出現此錯誤的一般原因是沒有加此參數。

CURLOPT_SSL_VERIFYHOST的值

設為0表示不檢查證書

設為1表示檢查證書中是否有CN(common name)欄位

設為2表示在1的基礎上校驗當前的域名是否與CN匹配。

二、解決方案

如果出現:

PHP Notice: curl_setopt():

CURLOPT_SSL_VERIFYHOST with value 1 is deprecated and will be removed as of libcurl 7.28.1. It is recommended to use value 2 instead in

一般原因是你設置了 curl_setopt ( $curl_handle, CURLOPT_SSL_VERIFYHOST, true );

改成curl_setopt ( $curl_handle, CURLOPT_SSL_VERIFYHOST, 2 );就行了。

(5)phpcurl處理錯誤擴展閱讀

PHP其他原因錯誤:

1、錯誤現象

在用curl進行模擬調用時,curl接收內容會出現"Empty reply from server" 和 "Recv failure: Connection was reset"的錯誤。

2、解決方案

經過對apache的error_log進行跟蹤,出現錯誤"Connection reset by peer: core_output_filter: writing data to the network"

修改httpd.conf,在虛擬主機上添加如下內容:

EnableSendfile off

EnableMMAP off

修改後"Empty reply from server"錯誤消失。

閱讀全文

與phpcurl處理錯誤相關的資料

熱點內容
蘋果版app是什麼 瀏覽:743
雲伺服器能更換地址 瀏覽:74
linux預讀演算法 瀏覽:556
視頻用什麼app編輯 瀏覽:68
編譯原理清華實驗 瀏覽:976
閑蛋app人氣怎麼樣 瀏覽:273
javacatch用法 瀏覽:859
京峰教育python 瀏覽:984
加密貨幣戰勝法定貨幣 瀏覽:684
混凝土結構中冊pdf 瀏覽:930
永劫無間解壓不了怎麼回事 瀏覽:810
php如何開啟curl 瀏覽:675
紅黃文件夾 瀏覽:125
違背皇帝的命令是死罪嗎 瀏覽:68
phpcurl處理錯誤 瀏覽:463
linuxftp防火牆埠設置 瀏覽:790
java面板圖片 瀏覽:485
泰拉瑞亞14安卓版怎麼操作 瀏覽:720
安卓手機相冊加密軟體 瀏覽:53
免費雲伺服器能永久使用嗎 瀏覽:705