2016-09-06 10 views
0

cURLをC#web-request相当のものに変換しようとしています。私は、cURL(-o response.zip)からの応答のダウンロードなしで、cURLをC#に変換することができます。しかし、問題があるのは、(-o response.zip)response.zipのcURLコードを翻訳/変換するためのC#コードで、ファイルのcURL構文をダウンロードすることは考えられません。cURLをWebRequestに変換します。CURLに相当する結果のdUload jonファイルをzip出力として出力します。 '-o response.zip'

以下は私のcURLです。以下は

curl -X GET -H "Content-Type: application/json" -H "X-API-TOKEN: 123456789asdfghj1234qqwerewrty" "https://yourdatacenterid.test.com/API/v3/responseexports/ES_1234sdfasas13wer/file" -o response.zip 

私は形式でない文字列の印刷から結果として下記なった、これまでのところ、私が持っている

string baseURLWithResponseID = "https://yourdatacenterid.test.com/API/v3/responseexports/ES_1234sdfasas13wer/file"; 

    var request = (HttpWebRequest)WebRequest.Create(new Uri(baseURLWithResponseID)); 
    request.Method = "GET"; 
    request.AllowAutoRedirect = false; 
    request.ContentType = "application/json"; 
    request.Accept = "*/*"; 
    request.Headers.Add("X-API-TOKEN", "123456789asdfghj1234qqwerewrty"); 
    // Here I'm missing how to convert -o response.zip as C# code ? 

    var response = request.GetResponse(); 

    using (var streamReader = new StreamReader(stream: response.GetResponseStream())) 
       { 
       var jsonresult = streamReader.ReadToEnd(); 

       Response.Write(jsonresult.ToString()); //I'm able to print the response json as a string but I want it to be downloaded as a zip file 

       } 

コードです。 enter image description here

APIレスポンスをCURL構文のC#でjsonダウンロード可能ファイルとして入手してください。ありがとうございました。

アップデート1:私は以下のようにコードを変更した

string baseURLWithResponseID = "https://yourdatacenterid.test.com/API/v3/responseexports/ES_1234sdfasas13wer/file"; 

string path = "c:\\API_Test\\response.json"; 
var request2 = (HttpWebRequest)WebRequest.Create(new Uri(baseURLWithResponseID)); 
request2.Method = "GET"; 
request2.AllowAutoRedirect = false; 
request2.ContentType = "application/json"; // Tried with "application/gzip" but output no change 
request2.Accept = "*/*"; 
request2.Headers.Add("X-API-TOKEN", "123456789asdfghj1234qqwerewrty"); 
    request2.Headers.Add("Accept-Encoding", "gzip,deflate"); // I added this new line 
    var responseFile = request2.GetResponse(); 

    using (var src = responseFile.GetResponseStream()) 
      { 
      using (var dst = File.Create(path)) 
      { 
        src.CopyTo(dst); 
       } 

      } 

ここで出力されるJsonファイルは、Jsonファイルでも読み込み不能な形式になっているかどうかわかりません。私がポストマンアプリケーションから同じことをしようとすると、私はそれをzipファイルとして取得し、それを解凍すると、きれいなjsonファイルを読み取ることができます。ここで

enter image description here

第三者のウェブサイトからのAPIの試用版からの画像です。私のcURL変換をC#にチェックしてください、何か不足していますか? JSONではありません

enter image description here

+0

JSONではありません、それは(のStreamReaderが、ストリームを使用していない)バイナリにそれを読んで、それをディスクに書き込む(またはあなたが好きな場所に保管)、ZIPファイル自体です – Gusman

+0

Gusman、返信いただきありがとうございます。はい。あなたは右のcURLの出力をresponse.zipとして表示しています。しかし、私はこれに新しいです、あなたは私がそれをやる方法を教えてください。サンプルコードまたはURL参照は参考になります。 – priya777

+0

Gimme 5分、私は例を書いてください – Gusman

答えて

1

、それはzipファイルの内容ですので、あなただけのバイナリにストリームを読み込み、ファイルにデータを書き込む必要があります。

string baseURLWithResponseID = "https://yourdatacenterid.test.com/API/v3/responseexports/ES_1234sdfasas13wer/file"; 

    var request = (HttpWebRequest)WebRequest.Create(new Uri(baseURLWithResponseID)); 
    request.Method = "GET"; 
    request.AllowAutoRedirect = false; 
    request.ContentType = "application/json"; 
    request.Accept = "*/*"; 
    request.Headers.Add("X-API-TOKEN", "123456789asdfghj1234qqwerewrty"); 

    var response = request.GetResponse(); 

    using (var src = response.GetResponseStream()) 
    { 
     using (var dst = File.Create("Path to wherever you want to store the file")) 
     { 
       src.CopyTo(dst); 
     } 

    } 
+0

私のupdate1をご覧ください。結果スクリーンショットを掲載しました。 – priya777

0

あなたはビルトインAutomaticDecompressionプロパティを使用することができます。

も、これを行うには非常に簡単な方法を提供していますStream.CopyTo、単にファイルストリームへの応答ストリームをコピーして、設定が完了し、.NET HttpWebRequestです。ただ、要求を作成した後に次の行を追加します。

request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
関連する問題