我正在尝试通过网络客户端访问安全网址并获取少量错误。 总体目的是从安全网址下载图像..
请注意,之前,我能够使用http从存储库下载图像,现在他们在同一个网址中强制执行(安全)https。 我们有一个定期运行的控制台应用程序,从服务器提取图像并在本地存储。
请告知我做错了什么?或者缺少什么?
以下是我所面临的问题。
下面列出了第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 --------------------------------
}
答案 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 cmdlet或wget utility(两者都应支持HTTPS和身份验证)
答案 1 :(得分:0)
您的代码运行正常。 正如Kel建议的那样,服务器响应头很可能给出答案。您确定服务器配置为支持https吗?
无需提供网络凭据。由于HTTPS仅是传输协议。它仅保护连接。
要进行身份验证,您必须配置服务器,例如进行BASIC或DIGEST身份验证。如果需要对所请求的资源进行设置授权。
关于你的一条评论&代码:不要忘记处理newImage。