|
はるまきとかげ様、Hongliang様、魔界の仮面弁士様
ご指摘どうもありがとうございます。大変勉強になり、有難いです。
ファイルの操作やヘッダの操作など、基本的な問題で申し訳ありませんが、これから勉強していきたいと思っています。
また、サービス提供元は問合せを受け付けていないようでした。
情報が小出しになってしまいすみませんが、正常に動作するVBAのサンプルが公開されていました。
サンプルと自作C#のパケットキャプチャの結果および修正した自作C#コードを下記に記載します。
APIが返す結果は変わらず「ファイルがありません」となります。
魔界の仮面弁士様にご指摘頂いた通り、Shift_JISのcsvはUTF-8 に再エンコードして送出されているようでしたので、
元のファイルの方をutf-8に変換しています。
サンプルとC#の結果の相違点は、Content-Length(変換方法の問題?)とバウンダリ文字のように見えます。
バウンダリにダブルクォーテーションを付けない形で設定する方法はどうすればよいでしょうか。
何度も申し訳ありませんが、どうぞよろしくお願いいたします。
***正常に動作するサンプルの送出データ***
POST /api/v1/ConvertToWebInput HTTP/1.1
Connection: Keep-Alive
Content-Type: multipart/mixed; boundary=================12345678987654321
Accept: */*
Accept-Language: ja
User-Agent: Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)
Content-Length: 13795
Host: model.app.lowenergy.jp
--================12345678987654321
Content-Disposition: mixed; name="A"
Content-Type: text/csv; charset=utf-8
*CSVの中身
***自作C#の送出データ***
POST /api/v1/ConvertToWebInput HTTP/1.1
Accept-Language: ja
Accept: */*
User-Agent: Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)
Content-Type: multipart/mixed; boundary="================12345678987654321"
Host: model.app.lowenergy.jp
Content-Length: 13793
Connection: Keep-Alive
--================12345678987654321
Content-Disposition: mixed; name="A"
Content-Type: text/csv; charset=utf-8
*CSVの中身
***自作C#コード***
var files = new List<string>();
files.Add(@"C:\test\A");
var content = new MultipartContent("mixed", "================12345678987654321");
foreach (var s in list)
{
var fileContent = new StreamContent(File.OpenRead(s));
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("mixed")
{
Name = "\"" + Path.GetFileName(s) + "\""
};
fileContent.Headers.ContentType = new MediaTypeHeaderValue("text/csv"){ CharSet = Encoding.UTF8.WebName };
content.Add(fileContent);
}
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Add("Accept-Language", "ja");
httpClient.DefaultRequestHeaders.Add("Accept", "*/*");
httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)");
string url = @"http://model.app.lowenergy.jp/api/v1/ConvertToWebInput";
httpClient.DefaultRequestHeaders.ExpectContinue = false;
HttpResponseMessage response = httpClient.PostAsync(url, content).Result;
string test = response.Content.ReadAsStringAsync().Result;
|