亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 cURL 保存圖像

使用 cURL 保存圖像

PHP
慕少森 2022-07-02 17:04:04
這是一個指向圖像的 URL:https://www.somesite.com/some/dir/jsp/data.jsp?KEY=12155&TYPE=jpg&qi=R7SWtM5F5PL4cDDFfdfpIrqIWSY3gr2XGQg=如果我在 CLI 中使用 cURL 作為這個命令,我會得到圖像:/usr/bin/curl -o 1234.jpg 'the_url_to_image'我需要在 PHP 中使用 cURL 和參數。我嘗試了幾個參數來獲取圖像,我總是得到一個 403 錯誤已禁止訪問指定資源。阿帕奇雄貓我的參數(只有 cURL 參數,將圖像寫入文件的代碼不在此處): $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $img_url); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, false); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_HEADER, 0); 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_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_COOKIEJAR,$cookie_filename); curl_setopt($ch, CURLOPT_COOKIEFILE,$cookie_filename); $page_content  = curl_exec($ch); curl_close($ch);編輯如果我將圖像 URL 提供給此頁面:onlinecurl.com我得到了圖像二進制文件,沒有錯誤消息。所以圖像可以用cURL保存,我只需要 curl_setopt正確設置。編輯通過在 CLI 中運行 a 命令,圖像被保存到本地路徑/usr/bin/curl -o 1234.jpg 'the_url_to_image'當運行相同的命令時shell_exec("/usr/bin/curl -o 1234.jpg 'the_url_to_image'")錯誤消息保存在 1234.jpg 文件中。同一命令的命令行和代碼執行有什么區別?
查看完整描述

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 用戶代理。


查看完整回答
反對 回復 2022-07-02
?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

401 未經授權

403被禁止

這些描述得很糟糕。

401 真的意味著未經過身份驗證

403真的意味著未授權

如果這確實是一個受保護的資源,需要登錄才能獲取它,那么這意味著是的,服務器識別出你(你沒有得到 401),但你沒有所需的權限(403)。

另一方面,如果圖像確實是公開的,則實際粘貼鏈接可以幫助我們為您提供幫助。


查看完整回答
反對 回復 2022-07-02
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

事實證明,問題很簡單。

- 第一個線索是終端中的命令正在運行,但相同的命令shell_exec()返回錯誤。

-第二條線索是 delboy1978uk 提到的錯誤不是 401 not authenticated而是 403 non authorized。

所以一定是 URL 或參數有問題。我打印了 URL,但沒有發現錯誤……長話短說,問題出在 URL 中的特殊字符上。當我打印 URL 時,瀏覽器&正確顯示了字符,而不是函數將其作為參數&

htmlspecialchars_decode()因此,如果我在運行命令之前提供 URL,那么它可以完美運行。

因此,請注意 URL 中的特殊字符!


查看完整回答
反對 回復 2022-07-02
?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

您可以嘗試添加


curl_setopt($ch, CURLOPT_POST, 0);

如果這不起作用,您必須在 web.xml 中添加 Apache Tomcat:


<login-config>

  <auth-method>BASIC</auth-method>

</login-config>


查看完整回答
反對 回復 2022-07-02
  • 4 回答
  • 0 關注
  • 193 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號