2016-09-07 25 views
2

まず、私はPostManツールにスクリプトを投稿しようとします。なぜpython要求は動作していますが、C#要求は機能していませんか?

{"AO":"ECHO"} 

正常に動作します。それから私はC#でこの要求を書いていますが、うまくいきません。 さらに、私はPythonでリクエストを書きました。うまくいきました。 私のプロジェクトはMicrosoft C#です。私はスクリプトのPythonをC#で実行したくない。

==== Pythonの=========

import httplib 
import json 
import sys 

data = '{"AO":"ECHO"}' 
headers = {"Content-Type": "application/json", "Connection": "Keep-Alive" } 
conn = httplib.HTTPConnection("http://10.10.10.1",1040) 
conn.request("POST", "/guardian", data, headers) 
response = conn.getresponse() 

print response.status, response.reason 
print response.msg 

==== C#の============

var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://10.10.10.1:1040/guardian"); 

      httpWebRequest.Method = "POST"; 

      httpWebRequest.ContentType = "application/json"; 
      using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
      { 

       string json = "{\"AO\":\"ECHO\"}"; 

       streamWriter.Write(json); 
       streamWriter.Flush(); 
       streamWriter.Close(); 

       var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
       using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
       { 
        var result = streamReader.ReadToEnd(); 
        Console.WriteLine(result); 
       } 
      } 

I "ContentLength"を入れようとするが、それでもタイムアウト例外が発生する。 私はRestSharpを使用しようとしましたが、タイムアウトではなくnullを返します。 いずれか、私はそれがpythonで細かい作業を、なぜ理解しない 、私を助けてください...

  var client = new RestClient("http://10.10.10.1:1040/guardian"); 
      var request = new RestRequest(); 

      request.Method = Method.POST; 
      request.AddHeader("Content-Type", "application/json"); 
      request.Parameters.Clear(); 
      request.RequestFormat = DataFormat.Json; 
      request.AddBody(new { AO = "ECHO" }); 

      var response = client.Execute(request); 
      var content = response.Content; 

を助けてください。 しかし、なぜそれがC#で動作していません。 C#で多くのリクエストを見つけようとしましたが、タイムアウトでエラー例外が発生しました。

+0

[ここ](http://stackoverflow.com/questions/1789627/how-to-change-the-timeout-on-a-net-webclient-object)このような類似した問題ですか? – shanmugharaj

+0

親愛なる@Shankfk、 私の問題と同じものはありません。 私のネットワークサーバーでテストしています。これを実行するにはわずか3秒かかります。 そして、上のようにpythonスクリプトでうまく動作します。 しかし、C#ではそれはまったく動作しません、エラー例外タイムアウトを返します。 しかし私はタイムアウトを変更しようとします。 –

+0

PythonとC#は同じエンコーディングを使用しますか? –

答えて

0

Pythonは自動的にContent-Length httpヘッダーを追加します。 https://docs.python.org/2/library/httplib.html#httpconnection-objects

私はC#でこのヘッダーを手動で設定する必要があるかもしれないと思います。

httpWebRequest.ContentLength = json.length; 

サーバーによっては、UserAgentも設定する必要があります。

httpWebRequest.UserAgent=".NET Framework Test Client"; 
+0

こんにちは、 それはまだ同じエラーが発生している。その方法では動作しないようです。 –

+0

この時点で、httpトラフィックを検査し、要求と応答を2つの言語の間でサーバーと比較するために、fiddlerまたはWiresharkを使用します。 – Veener

関連する問題