VBScriptからC#への移植です。
dataの中身はString型の単なる複数行文字列です。
サーバ側CGIは、標準入力でクライアントからの文字列を受け取り、そのままテキストファイルにするものです。なので、キーバリュー型ではありません。
移植元プログラム:
http://codepad.org/bXsCPJkd
C#プログラム:
http://codepad.org/KxRJYwPG
(10/7変更)サーバCGI:
http://codepad.org/ZZ0jEgpM
(10/6追加)※文字数オーバーしたので、ソースはcodepadに貼り付けました。
移植元プログラムはしっかり動きます。
C#の方はこのまま実行しても、サーバには0Byteのファイルが出来上がります。
DefaultRequestHeaders.Addの行を有効にすると、"Misused header name"の例外が発生します。
ネット上を検索しても、multipartの例ばかりで、参考になりませんでした。
こちらが参考になると思います。
http://logicalerror.seesaa.net/article/377244421.html
HttpClient cli = new HttpClient(); cli.MaxResponseContentBufferSize = int.MaxValue; HttpContent content = new FormUrlEncodedContent(data); var response = await cli.PostAsync(url, content); String res = await response.Content.ReadAsStringAsync();
data の内容は正しいパラメータ文字列になっていなければいけません。
URL エンコードをする必要があります。
リクエストヘッダには Content-Type を指定できません。
レスポンスヘッダで返ってくるべきものです。
http://dobon.net/vb/dotnet/internet/webrequestpost.html
ここが参考になるかも知れません。
以下追記(10/7)
http://cai.cs.shinshu-u.ac.jp/sugsi/Lecture/php/http/2-arg.html
postDataをキーバリューではなく、送るデータそのものに変えればいいだけではないかと思います。
教えて頂いた、dobonのサイトのソース内の、urlとデータだけを置き換えて、UploadStringのパターンと、UploadDataパターンを試しました。
CGIのresponsetextに件数が返ってくるようにしましたが、
VBScriptではちゃんとした件数がでるのに、C#では0件の結果が返ってきます。
すみません、原因が分かりました!
bashスクリプトの read 命令は1行のみの改行を含まないデータを読めないみたいです。
複数行にしたら、しっかり結果がでました。
VBScriptの試験では、複数行の既存データを使用し、C#ではハードコーディングで単行のデータを書いていた為です。
クライアント側の問題ではありません。お騒がせしました。
お二人共ありがとうございました。勉強になりました。
こちらが参考になると思います。
http://logicalerror.seesaa.net/article/377244421.html
HttpClient cli = new HttpClient(); cli.MaxResponseContentBufferSize = int.MaxValue; HttpContent content = new FormUrlEncodedContent(data); var response = await cli.PostAsync(url, content); String res = await response.Content.ReadAsStringAsync();
data の内容は正しいパラメータ文字列になっていなければいけません。
URL エンコードをする必要があります。
リクエストヘッダには Content-Type を指定できません。
レスポンスヘッダで返ってくるべきものです。
すみません、原因が分かりました!
bashスクリプトの read 命令は1行のみの改行を含まないデータを読めないみたいです。
複数行にしたら、しっかり結果がでました。
VBScriptの試験では、複数行の既存データを使用し、C#ではハードコーディングで単行のデータを書いていた為です。
クライアント側の問題ではありません。お騒がせしました。
お二人共ありがとうございました。勉強になりました。
補足です。
サーバ側のcgiは標準入力でクライアントからの文字列を受け取り、そのままテキストファイルにするものです。
なので、キーバリュー型ではありません。
使うコンストラクタはこちらです。
2015/10/07 08:34:17https://msdn.microsoft.com/en-us/library/hh138198%28v=vs.118%29.aspx
すみません、原因が分かりました!
2015/10/07 17:51:39bashスクリプトの read 命令は1行のみの改行を含まないデータを読めないみたいです。
複数行にしたら、しっかり結果がでました。
VBScriptの試験では、複数行の既存データを使用し、C#ではハードコーディングで単行のデータを書いていた為です。
クライアント側の問題ではありません。お騒がせしました。
お二人共ありがとうございました。勉強になりました。