为什么python请求工作,而c#请求不工作

本文关键字:请求 工作 为什么 python | 更新日期: 2023-09-27 18:05:54

首先,我尝试在PostMan工具中发布脚本。

{"AO":"ECHO"}

很好。然后我在c#中编写这个请求,但它不起作用。然后我又用Python写了一次请求,它运行得很好。但我的项目是用微软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#中找到许多请求,但它得到了超时的错误异常。

为什么python请求工作,而c#请求不工作

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";