溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

在PHP中使用Curl時出現(xiàn)403錯誤如何解決

發(fā)布時間:2021-02-08 16:20:50 來源:億速云 閱讀:899 作者:Leah 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)在PHP中使用Curl時出現(xiàn)403錯誤如何解決,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

代碼如下:


*   Trying 127.0.0.1... * connected
* Connected to 127.0.0.1 (127.0.0.1) port 8118 (#0)
* Establish HTTP proxy tunnel to www.baidu.com:80
> CONNECT www.baidu.com:80 HTTP/1.0
Host: www.baidu.com:80
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Proxy-Connection: Keep-Alive

< HTTP/1.0 403 Connection not allowable
< X-Hint: If you read this message interactively, then you know why this happens ,-)
<
* The requested URL returned error: 403
* Received HTTP code 403 from proxy after CONNECT
* Closing connection #0
... Failed.
可以看到proxy服務(wù)器工作正常,的確是baidu返回了403錯誤,但原因肯定還在我這邊。終于,從網(wǎng)上(1of2, 2of2)得到了點(diǎn)啟發(fā)──我使用的是proxytunnel而非proxy。

在代碼中,有這么一句:

復(fù)制代碼 代碼如下:


 curl_setopt($this->mSh, CURLOPT_HTTPPROXYTUNNEL, true);
 curl_setopt($this->mSh, CURLOPT_PROXY, $phost);


php文檔中沒有詳細(xì)說明,不過man curl中有詳細(xì)解釋,兩者都是代理,proxytunnel(-p參數(shù))允許其他協(xié)議通過http代理傳輸,而proxy(-x參數(shù))則只能走h(yuǎn)ttp協(xié)議。所以我猜測,google baidu的服務(wù)器和curl的proxytunnel不和,所以返回403。

禁用掉上面2行代碼的第一句后,curl訪問恢復(fù)正常。

比較奇怪的是,幾種操作系統(tǒng)下還不一樣,一臺MAC OSX就要顯式的禁用proxytunnel才可以,curl版本:

復(fù)制代碼 代碼如下:


$ curl --version
curl 7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Protocols: tftp ftp telnet dict ldap http file https ftps
Features: GSS-Negotiate IPv6 Largefile NTLM SSL libz


而另外一臺ubuntu則完全不受影響,怎么都能用,curl版本:

復(fù)制代碼 代碼如下:


$ curl --version
curl 7.18.2 (i486-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.10
Protocols: tftp ftp telnet dict ldap ldaps http file https ftps
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz


MT主機(jī)上的centos也沒事,curl版本:

復(fù)制代碼 代碼如下:


$ curl --version
curl 7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
Protocols: tftp ftp telnet dict ldap http file https ftps
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz


看來不完全是curl版本問題,MAC OSX的確與眾不同啊。

還有一個原因也會導(dǎo)致curl返回403錯誤,如果設(shè)置了:

復(fù)制代碼 代碼如下:


 curl_setopt($ch, CURLOPT_NOBODY, true);


則需要緊跟著設(shè)置:

復(fù)制代碼 代碼如下:


 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');


不然會因?yàn)閔ttp服務(wù)器不允許 HEAD 命令而返回403錯誤。參考:Trouble with a cURL request in PHP(http://forums.devshed.com/php-development-5/trouble-with-a-curl-request-in-php-445222.html)。MAC OSX上curl之所以特殊,也不排除是這種原因吧。

上述就是小編為大家分享的在PHP中使用Curl時出現(xiàn)403錯誤如何解決了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI