using System;
using System.Text;
using System.Net;
using System.IO;
namespace HelloWorldApplication
{
class HelloWorld
{
static void Main(string[] args)
{
/* 我的第一个 C# 程序/
string ew = PostWebRequest("http://154.206.44.193:8080", "{"id":10005,"arg":{"gameid":0}}");
/ 我的第一个 C# 程序*/
Console.WriteLine("我的第一个 C# 程序");
Console.WriteLine(ew);
Console.ReadKey();
}
public static string PostWebRequest(string postUrl, string paramData)
{
string ret = string.Empty;
try
{
Encoding dataEncode = System.Text.Encoding.GetEncoding("utf-8");
byte[] byteArray = dataEncode.GetBytes(paramData); //转化
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
webReq.Method = "POST";
webReq.ContentType = "application/x-www-form-urlencoded";
webReq.ContentLength = byteArray.Length;
webReq.Timeout = 30000;
webReq.SendChunked = false;
webReq.KeepAlive = false;
Stream newStream = webReq.GetRequestStream();
newStream.Write(byteArray, 0, byteArray.Length);//写入参数
newStream.Close();
HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default);
ret = sr.ReadToEnd();
sr.Close();
response.Close();
newStream.Close();
}
catch (Exception ex)
{
return "响应超时";
}
return ret;
}
}
}
//这个地址是C++接口调用地址,分包提交会失败,成功率不能达到100%,测试过期时间调长,也是一样
//在线工具http://www.dooccn.com/csharp/ 测试可以
//SendChunked = false;
//类型:System.Boolean如果发送了分块请求,则为 true;否则为 false。默认值为 false。
//以上测试没效果
你指的分包是TCP分包,还是http请求分成两次?
如果是tcp的很难避免,数据大了必分
http动作分步的话, 参考:https://docs.microsoft.com/zh-cn/dotnet/api/system.net.servicepoint.expect100continue
这个接口可以试试,在有些工具上是可以执行的,但是在执行的时候,有的工具可以,有的工具就是失败,同样都是post,如果别的工具不分包,C#做不到,感觉没道理
@Trr,song: 那你试了.expect100continue=false 了吗?
@pencile: 好的,晚上回去我试试
@pencile: 你的意思是修改C++的接口接收吗?
@pencile: myReq.ServicePoint.Expect100Continue = false;加了这个试过了,没用