2012-03-17 7 views
1

更新:https URIにデータをPOSTしようとしています。 POSTは、HTTPのために動作しますが、それはHTTPS URIC#でのHTTPS POST、Winforms(ストリームライター、HttpWebResponse、HttpWebRequest)


ためこんにちは、私はウェブサイトにデータを投稿するexeファイルのC#のWinFormsを作成しています失敗しました。コードは以下の通りです。問題は、ストリームが私のポストデータを複製し、..です

例えば:私は、この投稿したいと - 、私は実際に送られているもののトラフィックを、チェックするとき次に>username=bob

username=bobusername=bob

参照してください。 ?これは重複し、同じ行をもう一度バッファの最後に追加して送信します。

私は2日から問題を見つけようとしています。体はこれを解決できますか、いくつかのヒントを教えてください。 ..あなたに感謝

(コンテンツ長が正しく12に設定し、それはバッファの末尾にもう一度同じデータを付加した後、24のバイトを送信している)

はヘッダがあります

POST /login/ HTTP/1.0 
Content-Type: application/x-www-form-urlencoded 
Host: abc.test.com 
Content-Length: 12 

username=bobusername=bob 
- 

この私が行byte[] postBytes = Encoding.ASCII.GetBytes(post_data);にブレークポイントを置くとpostBytesは正しいデータが含まれている...しかし、それ私は現在

string post_data = "username=bob"; 
string uri = "https://abc.test.com/login/"; 

HttpWebRequest request = (HttpWebRequest) 
WebRequest.Create(uri); 
request.KeepAlive = false; 
request.ProtocolVersion = HttpVersion.Version10; 
request.Method = "POST"; 

byte[] postBytes = Encoding.ASCII.GetBytes(post_data); 

request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = postBytes.Length; 

Stream requestStream = request.GetRequestStream(); 

requestStream.Write(postBytes, 0, postBytes.Length); 

MessageBox.Show(postBytes.Length.ToString()); 
requestStream.Close(); 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
StreamReader sr = new StreamReader(response.GetResponseStream()); 
string tmp = sr.ReadToEnd().Trim(); 

を使用していたコードです出力を2回取得します。

どうしてですか?私は明確であることを願っています。

答えて

1

このpageに記載されているようにトレース設定を設定すると、詳細情報を得ることができます。あなたのコードを試したところ、次のような結果が得られました。

System.Net Verbose: 0 : [2324] Data from ConnectStream#26756241::Write 
System.Net Verbose: 0 : [2324] 00000000 : 75 73 65 72 6E 61 6D 65-3D 62 6F 62    : username=bob 
System.Net Verbose: 0 : [2324] Exiting ConnectStream#26756241::Write() 

データが正しくConnectStreamに書き込まれているようです。他のどこかで何かが間違っていますか?

そして、WebResponseオブジェクトを閉じることを忘れないでください。

+0

こんにちは、私は時間と助けてくれてありがとう。私はWebレスポンスを閉じようとしました。しかし、それはまだ重複を送信します。はい、何かが間違っている何か... –

2

URIのホストをアドレス指定可能なもの(http://adsf.com/login)に変更した後、期待通りに動作するように見えました(12バイトのペイロードでHTTPポストを送信しました)。ここでwiresharkのからのトレースです:

Wireshark trace

あなたは私はあなたが、これは少なくとも問題の可能なソースとしてコンピュータやコードを除外します何を得る参照するために使用するURIを試してみるかもしれません。別のURIを使用しているときに問題が解消された場合は、ネットワーク機器とWebサーバ(リバースプロキシ設定、Webサーバ設定、ネットワークスイッチ設定など)に問題がある可能性があります。

+0

こんにちはDarwyn、あなたの時間と助けてくれてありがとう..私はこの新しいURIを試して、今、私のexeは正しいデータを送信することに注意しました..しかし、私が見つけた興味深いものは、これは失敗そのHTTPSリクエストがあった場合のみHTTPリンクのために、バフ一ティエムだけをひっくり返す。だから誰でもHTTPS(安全な)接続のためにデータが複製されている理由は何ですか?私はHTTPSサイトに送信しようとしています。(私のtquestionを今編集しました) –

+0

HTTPSで失敗します。これはHTTPで動作します。私は残念ながらHTTPS URIに投稿したいです... –

関連する問題