4 回答

TA貢獻1803條經驗 獲得超3個贊
同一命令的命令行和代碼執行有什么區別?
您的用戶代理甚至沒有關閉:
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');
嘗試將其設置為真正的 curl-cli 用戶代理,例如
curl_setopt($ch,CURLOPT_USERAGENT,'curl/7.63.0');
或者
curl_setopt($ch,CURLOPT_USERAGENT,'curl/'.(curl_version()['version']));
這很罕見,但有可能(甚至有證據表明)他們正在使用用戶代理白名單,而 Google Chrome(或者是 Safari?)不在他們的白名單上,但 curl-cli 是......
另一種可能的解釋是,他們試圖檢測并阻止躺在他們的用戶代理上的人,并且很容易檢測到您在撒謊:您(錯誤地)說您是 Safari 或 Chrome,以及這兩者總是發送Acccept-Encoding: gzip/deflate/whatever
,但你的 curl 請求沒有(因為你沒有使用 CURLOPT_ENCODING),因此很容易檢測到你的用戶代理是假的,也許這就是導致阻塞的原因。無論哪種方式,嘗試使用真正的 curl 用戶代理。

TA貢獻1856條經驗 獲得超17個贊
401 未經授權
403被禁止
這些描述得很糟糕。
401 真的意味著未經過身份驗證
403真的意味著未授權
如果這確實是一個受保護的資源,需要登錄才能獲取它,那么這意味著是的,服務器識別出你(你沒有得到 401),但你沒有所需的權限(403)。
另一方面,如果圖像確實是公開的,則實際粘貼鏈接可以幫助我們為您提供幫助。

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

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