工作上需要通过http协议往服务器post一条json字符串,服务器会返回成功或者故障信息,网络上找了些HttpWebRequest例子,都遇到同一种现象,相同的代码,如果我电脑打开Fiddler 4软件,执行结果能够成功,但我关闭Fiddler 4情况下,返回提示信息是“发送数据不能为空”。
不知道问题的原因,请求帮助,谢谢
贴一段代码,c#
public static string HttpPost(string url, string param)
{
byte[] byteArray = Encoding.UTF8.GetBytes(param);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "POST";
webRequest.ContentType = "text/xml;charset=UTF-8";
webRequest.ContentLength = byteArray.Length;
Stream newStream = webRequest.GetRequestStream();
newStream.Write(byteArray, 0, byteArray.Length);
newStream.Close();
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
StreamReader php = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string phpend = php.ReadToEnd();
return phpend;
}
你不是json么?webRequest.ContentType = "text/xml;charset=UTF-8"; 这里应该是text/json
地址是什么,http还是hittps,fiddler是否设置了代理服务器,关闭fiddler后打开internet设置看看
string param是什么内容,下断点看看。
这我没说仔细,抱歉,对方给我了条报文是text/xml这个,只是做为参数传入的是json字串,还有我对网络通讯没怎么接触过,见笑,
fiddler也是今天下的,无意间发现开启行,关闭不行的现象。
给的报文
POST/HTTP/1.1\r\nAccept: /
Host:127.0.0.1:6801
Content-Type:text/xml;charset=utf-8
Content-Length:549
Connection:close
Content-Length: 549
[{"BCJY":"0.00","COUNT":"1","CZLX":"水费","DATA":[{"DSFJE1":"0","DSFJE2":"0","DSFJE3":"0","FJDJ1":"0","FJDJ2":"0","FJDJ3":"0","JTDJ1":"2","JTDJ2":"0","JTDJ3":"0","JTJE1":"20.00","JTJE2":"0","JTJE3":"0","JTSL1":"10","JTSL2":"0","JTSL3":"0","WSDJ":"0","WSJE":"0","WSL":"0","YSLXID":"1","YSLXMC":"居民用水"}],"FBYSL":"10","FKRQ":"2018-08-04 09:37:23","JYDM":"001","LSH":"270915180804093723","NSSBH":"","SCJY":"0.00","SFWD":"270915","SFY":"小明","SFYY":"","SJFK":"1","YHBH":"00002001","YHDZ":"湖南","YHMC":"张三","YHMCZH":"","ZJJE":"20.00"}]
通过测试,目前的问题现象这样:
1)通过postman软件,发送字符串,能够获得成功的结果
2)通过postman直接生成c#的代码,在vs2017里执行,还相同的问题,不开启Fiddler4,返回故障代码(发送数据不能为空),开启Fiddler4能获得成功
代码如下:(
var client = new RestClient("http://xxx.xxx.77.277:xxxx/");
var request = new RestRequest(Method.POST);
request.AddHeader("postman-token", "50e7f6c5-83f2-0d35-0d8e-e1d505c80bdb");
request.AddHeader("cache-control", "no-cache");
request.AddParameter("undefined", "[{\"BCJY\":\"0.00\",\"COUNT\":\"1\",\"CZLX\":\"水费\",\"DATA\":[{\"DSFJE1\":\"0\",\"DSFJE2\":\"0\",\"DSFJE3\":\"0\",\"FJDJ1\":\"0\",\"FJDJ2\":\"0\",\"FJDJ3\":\"0\",\"JTDJ1\":\"2\",\"JTDJ2\":\"0\",\"JTDJ3\":\"0\",\"JTJE1\":\"20.00\",\"JTJE2\":\"0\",\"JTJE3\":\"0\",\"JTSL1\":\"10\",\"JTSL2\":\"0\",\"JTSL3\":\"0\",\"WSDJ\":\"0\",\"WSJE\":\"0\",\"WSL\":\"0\",\"YSLXID\":\"20000\",\"YSLXMC\":\"居民用水\"}],\"FBYSL\":\"10\",\"FKRQ\":\"2018-08-06\",\"JYDM\":\"001\",\"LSH\":\"hnzykjzp00000340\",\"NSSBH\":\"\",\"SCJY\":\"0.00\",\"SFWD\":\"HNZYKJ\",\"SFY\":\"sale\",\"SFYY\":\"\",\"SJFK\":\"1\",\"YHBH\":\"1808070\",\"YHDZ\":\"裕华大厦B-813\",\"YHMC\":\"田田\",\"YHMCZH\":\"\",\"ZJJE\":\"20.00\"}]", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content.ToString());