下面的代码段将请求发送到URL,然后获取响应。
我在Wireshark中观察了它的行为。在Wireshark中,我看到原始的POST
请求发出了,然后我看到了两个响应。
第一个是"100 Continue"
响应。第二个是"200 OK"
响应。
在网络浏览器中提交此请求会得到完全相同的响应,浏览器会正确地将其标识为“确定”响应。
如果我理解正确,那么"100 Continue"
的响应应该由幕后的.net
处理,因此我的“ lResponse”变量应捕获“ 200 OK”。但是,lWebRequest.GetResponse( )
却抛出错误,抱怨得到"100 Continue"
响应。
我尝试将 Expect100Continue
上的 ServicePointManager
设置为true和false,并且尝试增加持续超时。两者都没有任何区别。
HttpWebRequest lWebRequest = ( HttpWebRequest ) WebRequest.Create( "REMOVED" );
lWebRequest.Method = "POST";
lWebRequest.ContentLength = lsPost.Length;
lWebRequest.ContentType = "application/x-www-form-urlencoded";
lWebRequest.Host = "REMOVED";
lWebRequest.Referer = "REMOVED";
StreamWriter lStreamWriter = null;
try
{
lStreamWriter = new StreamWriter( lWebRequest.GetRequestStream( ) );
lStreamWriter.Write( lsPost );
}
catch ( Exception lError )
{
Console.WriteLine( lError.Message );
return;
}
finally
{
lStreamWriter.Close( );
}
HttpWebResponse lResponse = null;
try
{
lResponse = ( HttpWebResponse ) lWebRequest.GetResponse( );
}
catch ( Exception lError )
{
Console.WriteLine( lError.Message );
return;
}
String lsResult = "";
using ( StreamReader lStreamReader = new StreamReader( lResponse.GetResponseStream( ) ) )
{
lsResult = lStreamReader.ReadToEnd( );
lStreamReader.Close( );
}
Console.WriteLine( lsResult );