4 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個贊
同一命令的命令行和代碼執(zhí)行有什么區(qū)別?
您的用戶代理甚至沒有關(guān)閉:
curl_setopt ($ ch, CURLOPT_USERAGENT, 'Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 79.0.3945.79 Safari / 537.36');
嘗試將其設(shè)置為真正的 curl-cli 用戶代理,例如
curl_setopt($ch,CURLOPT_USERAGENT,'curl/7.63.0');
或者
curl_setopt($ch,CURLOPT_USERAGENT,'curl/'.(curl_version()['version']));
這很罕見,但有可能(甚至有證據(jù)表明)他們正在使用用戶代理白名單,而 Google Chrome(或者是 Safari?)不在他們的白名單上,但 curl-cli 是......
另一種可能的解釋是,他們試圖檢測并阻止躺在他們的用戶代理上的人,并且很容易檢測到您在撒謊:您(錯誤地)說您是 Safari 或 Chrome,以及這兩者總是發(fā)送Acccept-Encoding: gzip/deflate/whatever
,但你的 curl 請求沒有(因?yàn)槟銢]有使用 CURLOPT_ENCODING),因此很容易檢測到你的用戶代理是假的,也許這就是導(dǎo)致阻塞的原因。無論哪種方式,嘗試使用真正的 curl 用戶代理。

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個贊
401 未經(jīng)授權(quán)
403被禁止
這些描述得很糟糕。
401 真的意味著未經(jīng)過身份驗(yàn)證
403真的意味著未授權(quán)
如果這確實(shí)是一個受保護(hù)的資源,需要登錄才能獲取它,那么這意味著是的,服務(wù)器識別出你(你沒有得到 401),但你沒有所需的權(quán)限(403)。
另一方面,如果圖像確實(shí)是公開的,則實(shí)際粘貼鏈接可以幫助我們?yōu)槟峁椭?/p>

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個贊
事實(shí)證明,問題很簡單。
- 第一個線索是終端中的命令正在運(yùn)行,但相同的命令shell_exec()
返回錯誤。
-第二條線索是 delboy1978uk 提到的錯誤不是 401 not authenticated而是 403 non authorized。
所以一定是 URL 或參數(shù)有問題。我打印了 URL,但沒有發(fā)現(xiàn)錯誤……長話短說,問題出在 URL 中的特殊字符上。當(dāng)我打印 URL 時(shí),瀏覽器&
正確顯示了字符,而不是函數(shù)將其作為參數(shù)&
。
htmlspecialchars_decode()
因此,如果我在運(yùn)行命令之前提供 URL,那么它可以完美運(yùn)行。
因此,請注意 URL 中的特殊字符!

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個贊
您可以嘗試添加
curl_setopt($ch, CURLOPT_POST, 0);
如果這不起作用,您必須在 web.xml 中添加 Apache Tomcat:
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
- 4 回答
- 0 關(guān)注
- 180 瀏覽
添加回答
舉報(bào)