如何使用webclient访问安全URL

时间:2016-08-12 18:32:12

标签: c# webclient webclient-download

我正在尝试通过网络客户端访问安全网址并获取少量错误。 总体目的是从安全网址下载图像..

请注意,之前,我能够使用http从存储库下载图像,现在他们在同一个网址中强制执行(安全)https。 我们有一个定期运行的控制台应用程序,从服务器提取图像并在本地存储。

请告知我做错了什么?或者缺少什么?

以下是我所面临的问题。

  1. ///如果我使用代码部分1 ...我得到错误说参数无效。
  2. ///如果我使用代码部分2 ...文件被保存到本地但得到一条消息"文件似乎已损坏或较大且无法打开。
  3. 下面列出了第1节和第2节。

                using (WebClient webClient = new WebClient())
                {
    
                    webClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
                    webClient.Credentials = new NetworkCredential("id", "pwd");  // if credentials are wrong...still I get the imageByte
    
                    /// section 1 - if I use this code... I get error saying Parameter is not valid.
                    // ----------------------------- Start --------------------------------
                    imageByte = webClient.DownloadData("https://someurl/source/abcd.jpeg");
                    ////Initialize image variable
                    Image newImage;
                    ////Read image data into a memory stream
                    using (MemoryStream ms = new MemoryStream(imageByte, 0, imageByte.Length, true))
                    {
                        ms.Write(imageByte, 0, imageByte.Length);
    
                        //Set image variable value using memory stream.
                        newImage = Image.FromStream(ms, true, false); // Throws error at this line saying that parameter is not valid.
                    }
                    newImage.Save(@"location\image.jpeg");
                    // ----------------------------- End --------------------------------
    
    
                    /// section 2 - if I use this code... File gets saved to local but get a message " File appear to be corrupt or large and not able to open.
                    // ----------------------------- Start --------------------------------
                    webClient.DownloadFile("https://someurl/source/abcd.jpeg", @"location\image.jpeg");
                    // ----------------------------- End --------------------------------
    
                } 
    

2 个答案:

答案 0 :(得分:0)

两个错误都表明下载的数据不是有效的JPEG图像。可能是因为服务器返回了一些错误。

为了检查服务器是否返回错误,您可以查看HTTP响应标头和正文中的内容。

  • 对于正文,您可以尝试使用文本编辑器打开第2部分中保存的文件。

  • 对于标题,您可以使用调试程序或对程序进行简单更新来检查webClient.ResponseHeaders property

以下示例取自MSDN

// Obtain the WebHeaderCollection instance containing the header name/value pair from the response.
WebHeaderCollection myWebHeaderCollection = myWebClient.ResponseHeaders;

Console.WriteLine("\nDisplaying the response headers\n");

// Loop through the ResponseHeaders and display the header name/value pairs.
for (int i=0; i < myWebHeaderCollection.Count; i++)
{       
    Console.WriteLine ("\t" + myWebHeaderCollection.GetKey(i) + " = " + myWebHeaderCollection.Get(i));
}

另一种查看服务器实际返回内容的方法是Invoke-WebRequest PowerShell cmdletwget utility(两者都应支持HTTPS和身份验证)

答案 1 :(得分:0)

您的代码运行正常。 正如Kel建议的那样,服务器响应头很可能给出答案。您确定服务器配置为支持https吗?

无需提供网络凭据。由于HTTPS仅是传输协议。它仅保护连接。

要进行身份验证,您必须配置服务器,例如进行BASIC或DIGEST身份验证。如果需要对所请求的资源进行设置授权。

关于你的一条评论&代码:不要忘记处理newImage。