2016-09-07 3 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. Любой, пожалуйста, помогите ...

  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 автоматически добавит HTTP-заголовок Content-Length. https://docs.python.org/2/library/httplib.html#httpconnection-objects

Возможно, вам придется установить этот заголовок вручную на C#.

httpWebRequest.ContentLength = json.length; 

В зависимости от сервера, возможно, придется установить UserAgent.

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

Hi Veener, По-прежнему происходит такая же ошибка. Кажется, не работает с этим. –

+0

На этом этапе я использовал скрипт или Wireshark для проверки трафика http и сравнения запроса и ответа, идущего на сервер между двумя языками. – Veener

Смежные вопросы