我想使用控制台应用程序从 url 下载一张图片。

我使用了以下代码:

string sourceUrl = "http://i.ytimg.com/vi/pvBnYBsUi9A/default.jpg"; // Not Found 
                //string sourceUrl = "http://i.ytimg.com/vi/OrxZAN1FZUY/default.jpg"; // Found 
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sourceUrl); 
                HttpWebResponse response = null; 
                try 
                { 
                    response = (HttpWebResponse)request.GetResponse(); 
                } 
                catch (Exception) 
                { 
 
                } 

以上代码在“response = (HttpWebResponse)request.GetResponse();”行抛出异常

但是当我在浏览器中访问“http://i.ytimg.com/vi/pvBnYBsUi9A/default.jpg”网址时,将显示图像。

我在这里缺少什么?

请您参考如下方法:

我在 Chrome 中尝试了那个 url“http://i.ytimg.com/vi/pvBnYBsUi9A/default.jpg” 开发者工具。它还收到 404,但响应包括显示的图像。

您的代码不是异常的原因。该站点返回 404,您的代码出现异常。

您可以编写逻辑来查看响应,即使您收到 404 并决定是否像浏览器那样接受它。

如果您捕捉到 WebException,您似乎可以获得站点返回的响应,这使您可以根据文档查看 http 请求状态和响应。

.Net 4.5 文档中的示例...

try  
      {  
            // Creates an HttpWebRequest for the specified URL.  
            HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);  
            // Sends the HttpWebRequest and waits for a response. 
            HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();  
            if (myHttpWebResponse.StatusCode == HttpStatusCode.OK) 
               Console.WriteLine("\r\nResponse Status Code is OK and StatusDescription is: {0}", 
                                    myHttpWebResponse.StatusDescription); 
            // Releases the resources of the response. 
            myHttpWebResponse.Close();  
 
        }  
    catch(WebException e)  
       { 
            Console.WriteLine("\r\nWebException Raised. The following error occured : {0}",e.Status);  
       } 
    catch(Exception e) 
    { 
        Console.WriteLine("\nThe following Exception was raised : {0}",e.Message); 

WebException 具有 Response 和 Status 属性。因此,.Net 的处理方式似乎是捕获 WebException 并根据状态和响应内容(如果需要)确定如何处理。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!