簡體   English   中英

使用C#從HTTP響應中抓取圖像

[英]Grabbing an image from an HTTP response with C#

我試圖從C#中的HTTP響應中獲取圖像,但它不是圖像,而是其中一個重定向。 這是相關的代碼:

String url = "my image URL that's actually a redirect URL"
Image img = null;
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
    using (Stream str = response.GetResponseStream())
    {
        img = Image.FromStream(str);
    }
}

然而,它一直告訴我,我不能通過回應尋求。 我將響應流保存在byte []中然后將其打印出來,結果發現響應流實際上是重定向頁面,而不是圖像本身,並且瀏覽器正在通過Javascript進行處理。

如果從未實際傳輸過這個圖像作為對我的初始請求的響應,我該如何捕獲? 我不知道如何監視我的瀏覽器的后續請求,即使我將流指向它重定向到的圖像URL,它仍然給我相同的問題並打印出相同的重定向頁面HTML。

編輯:這是正在加載的Javascript頁面(而不是圖像)(還有標准的東西,但這是頁面上唯一的腳本):

<script>
var escapedHash = '';
var url = 'https://login.salesforce.com/?ec=302&startURL=%2Fcontent%2Fsession%3Furl%3Dhttps%253A%252F%252Fc.na9.content.force.com%252Fprofilephoto%252F005%252FF';
if (window.location.hash) {
   escapedHash = '%23' + window.location.hash.slice(1);
}
if (window.location.replace){ 
window.location.replace(url + escapedHash);
} else {;
window.location.href = url + escapedHash;
} 
</script>

有些網站會采取措施阻止人們使用托管圖片。 基本上,您必須聲明請求站點(引用URL)位於其域中。

如果您使用瀏覽器使用的相同鏈接會發生什么? 如果右鍵單擊圖像,可以“復制圖像URL”或查看“屬性”嗎? 如果是這樣,如果將URL復制到新的瀏覽器窗口會發生什么? 如果您使用新瀏覽器窗口中的URL(顯示圖像)作為您嘗試下載的URL,會發生什么?

根據我的經驗,重定向由瀏覽器和.NET類處理,沒有問題。 您可能必須指定參數或設置屬性以自動遵循重定向。

是否可以獲取您嘗試下載的URL?

更新
您的桌面應用程序在哪里登錄? 該網站不允許我直接訪問該圖像,因為我沒有登錄。這對您的應用程序也是一個問題。

您的應用尚未登錄,這就是您重定向到登錄頁面的原因。

事實證明問題的根源只是我愚蠢。 代碼工作得非常好,我只是忘記了之前我已經注釋掉了OpenAuth認證函數來進行調試。

所以問題是所有這些圖像請求都是在沒有OAuth標頭的情況下發送的,這導致服務器返回“登錄”頁面而不是圖像(顯然無法將其讀入C#圖像)。

故事的道德:確保您驗證發送的每個請求。

您必須遵循第一個請求中的重定向(由HTTP狀態301和響應中的標頭Transport標識)。 然后,您可以使用當前方法對重定向位置的響應進行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM