首先,我尝试在PostMan工具中发布脚本。
{"AO":"ECHO"}
工作正常。然后我在C#中写这个请求,但它不起作用。 我在Python中再次编写请求,并且运行良好。 但我的项目是在Microsoft C#中。我不想在C#中运行脚本Python。
==== 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);
}
}
我尝试输入“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;
请帮帮我, 我不明白为什么它在python中工作正常。 但为什么它不在C#中工作。 我尝试在C#中找到许多请求,但是在超时时出现错误异常。
答案 0 :(得分: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";