2016-08-12 22 views
0

Webクライアント経由でセキュリティ保護されたURLにアクセスしようとしましたが、エラーはほとんどありません。 セキュリティで保護されたURLから画像をダウンロードするのが目的です。webclientを使用してsecure urlにアクセスする方法

以前は、httpでリポジトリから画像をダウンロードできましたが、現在は同じURLに(セキュリティ)httpsが適用されています。 私たちは定期的に動作し、サーバーやローカルストアからイメージをプルするコンソールアプリケーションを持っています。

私が間違っていることを教えてください。何が欠けていますか?

私が直面している問題は次のとおりです。

  1. ///コードセクション1を使用すると、パラメータが無効であるというエラーが表示されます。私は、コードセクション2を使用する場合...ファイルはローカルに保存されますが、メッセージ「ファイルを取得します///

第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

両方のエラーがダウンロードされたデータが有効なJPEG画像ではないことを言う。いくつかのエラーは、サーバから返されたので、おそらくそれはある。

ためにサーバーがエラーを返したかどうかをチェックします、あなたはHTTP応答headeにあるものを見ることができますrsと体。

  • 本文のセクション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と認証をサポートする必要があります)

+0

ありがとうございます。レスポンスヘッダーから情報を取得しようとしましたが、エラーは表示されませんでした。私は応答の下にある。プラグマ= no-cache Cache-Control = no-cache、no-store Expires = Thu、07、2016 00:00:00 GMT Set-Cookie = JSESSIONID = "some GUID value";パス=/ABCD /;セキュア; HttpOnlyの サーバーを= Apacheの のContent-Type = text/htmlの;のcharset = UTF-8 のContent-言語= EN-US チャンク転送コード ヴァリ=のAccept-エンコーディングに 日=金、12,2016私が見ることができるものは、昨日の日付に設定されています...それは問題になりますか? – Amit

+0

疑わしいと思われるものはContent-Type = text/htmlです。イメージ/ jpegと思っています。テキストエディタで保存したファイルを開こうとしましたか(応答本文はUTF-8テキストでなければなりません) – Kel

+0

あなたは正しいです。私はテキストエディタでファイルを開くと...それは魅力的なように働いた...そして、それは私が任意の画像エディタでファイルを開くことができなかった理由...だから、Content- Type = text/html ...どのようにイメージをイメージとして取得できるのか? – Amit

0

あなたは」再コードは正常に動作します。 Kelが提案したように、サーバの応答ヘッダーが答えを出す可能性が最も高い。サーバーがhttpsをサポートするように設定されていますか?

ネットワーク資格情報を与える必要はありません。 HTTPSはトランスポートプロトコルのみであるためです。接続のみを保護します。

認証を行うには、たとえばBASICまたはDIGEST認証を行うようにサーバーを構成する必要があります。必要な場合は、要求されたリソースへの許可を設定します。

あなたのコードには1つのコメントがあります:newImageを処分することを忘れないでください。

関連する問題