在前不久
对接公司接口的时候遇到【HttpWebRequest】请求,一直返回【操作超时】
用postman请求又正常
我找了很多网上对应【操作超时】解决方案,无果。。。
最后还是在别人写的好的HttpHelper中发现了不一样,就只有一行代码
在我自己的代码中加上后,就正常了。
【先来看看一开始的请求代码】
public static string PostRequest(string Url, string Param)
{
HttpWebRequest request;
HttpWebResponse response;
string strURL = Url;
string StrDate = "";
string strValue = "";
try
{
request = (HttpWebRequest)WebRequest.Create(strURL);
request.Method = "POST";
request.ContentType = "application/json;";
request.Timeout = 20000;
byte[] Data = Encoding.UTF8.GetBytes(Param);
request.GetRequestStream().Write(Data, 0, Data.Length);
response = (HttpWebResponse)request.GetResponse();
request.GetRequestStream().Close();
}
catch (WebException ex)
{
strValue = ex.Message;
response = (HttpWebResponse)ex.Response;
}
try
{
Stream Data_S = response.GetResponseStream();
StreamReader Reader = new StreamReader(Data_S, Encoding.UTF8);
while ((StrDate = Reader.ReadLine()) != null)
{
strValue += StrDate + "\r\n";
}
Data_S.Close();
}
catch (Exception ex)
{
strValue = ex.Message;
}
return strValue;
}
【修改后的代码】
public static string PostRequest(string Url, string Param)
{
HttpWebRequest request;
HttpWebResponse response;
string strURL = Url;
string StrDate = "";
string strValue = "";
try
{
request = (HttpWebRequest)WebRequest.Create(strURL);
request.Method = "POST";
request.ContentType = "application/json;";
request.Timeout = 20000;
request.ServicePoint.Expect100Continue = false; //加了这一行代码 就OK了
byte[] Data = Encoding.UTF8.GetBytes(Param);
request.GetRequestStream().Write(Data, 0, Data.Length);
response = (HttpWebResponse)request.GetResponse();
request.GetRequestStream().Close();
}
catch (WebException ex)
{
strValue = ex.Message;
response = (HttpWebResponse)ex.Response;
}
try
{
Stream Data_S = response.GetResponseStream();
StreamReader Reader = new StreamReader(Data_S, Encoding.UTF8);
while ((StrDate = Reader.ReadLine()) != null)
{
strValue += StrDate + "\r\n";
}
Data_S.Close();
}
catch (Exception ex)
{
strValue = ex.Message;
}
return strValue;
}
request.ServicePoint.Expect100Continue = false;
上面的这一段代码的默认意思是:
是否在请求服务器前,询问是否需要以【100-continue】的形式请求后等待服务器响应
响应通过验证,返回status 100
然而现在是“false” 说明是不需要的询问服务器
问题起因分析:
我一开始请求的代码中压根就没那一行代码,直接套用,发现返回【操作超时】
是因为在请求前先询问是否需要用【100-continue】的形式请求
我默认是“true”,因为不加那行代码默认为“true”
询问发过去,服务器接口压根不处理这个询问
问开发接口的人员说直接在路由层就跳出了
我这边的代码就还在等待询问的响应,等啊等啊【超时操作】就给我报出来了
---------------------------------------------------------------------------------
加了那一行代码后
我就不询问了,直接发送数据
1.服务器收到数据
2.处理
3.响应
正常了!!!
但是这个问题是不是服务器接口有问题呢?打个问号,我其实也不太确定
就这个问题耽误了我足足几天时间,(史上最坑)无疑!!!
最后附上【100-continue】的详解
本文作者:[博主]大顺
本文链接:https://shunnet.top/rqyYJ3
版权声明:转载注明出处,谢谢