C#WebRequest(Http POST over SSL)在GetResponse()处挂起,但不同的URL可以工作。请求中也有错误的POST参数
我发现此代码按预期工作:C#WebRequest(Http POST over SSL)在GetResponse()处挂起,但不同的URL可以工作。请求中也有错误的POST参数,c#,post,ssl,timeout,httprequest,C#,Post,Ssl,Timeout,Httprequest,我发现此代码按预期工作: var url = "https://limal.info/efulfilment.php"; ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; var alternativeAnswer = Encoding.UTF8.GetString(new WebClient().UploadValues(url, new NameValueCollectio
var url = "https://limal.info/efulfilment.php";
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
var alternativeAnswer = Encoding.UTF8.GetString(new WebClient().UploadValues(url, new NameValueCollection() { { "xml", "test" } }));
但是,以下代码让我头疼:
var url = "https://limal.info/efulfilment.php";
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
var request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
request.Timeout = 5000; // I added this for you, so you only need to wait 5 sec...
using (var requestStream = request.GetRequestStream())
{
var writer = new StreamWriter(requestStream);
writer.Write("xml=test");
}
using (var response = request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
var reader = new StreamReader(responseStream);
var answer = reader.ReadToEnd();
}
}
不知怎的,post参数没有被识别,我得到了响应:
"limal.info bridge error: Missing 'xml' variable in post request."
(正确的答案是XML数据格式错误,因为测试是无效的XML…)
现在转到下一个问题:
当我使用不同的url时,会发生超时异常。在下面的代码中,它在上载值时挂起。(另一个使用HttpWebRequest的示例挂起在GetResponse,我也尝试过)
我在其他网站上看到了类似的问题。在.NET中,使用Http POST和SSL似乎是一个问题
为什么??:(问题1已解决:我回显了HTTP请求,发现它是空的。看起来,StreamWriter只有在刷新它时才真正写入。writer.Write(“xml=test”);writer.flush();关于问题1。StreamWriter也应该在using块中创建,这将导致刷新。它也将关闭流;但可能只是将Stream using块留在代码中以便于可读。问题2在此处得到解决:问题1已解决:我回显了HTTP请求,并看到它是空的。看起来,StreamWriter只执行lly在刷新时写入。writer.Write(“xml=test”);writer.flush();问题1。StreamWriter也应在using块中创建,这将导致刷新。它也将关闭流;但可能只是将Stream using块保留在代码中以便于可读。问题2在这里得到解决:
var url = "https://sys.efulfilment.de/rt/";
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
var alternativeAnswer = Encoding.UTF8.GetString(new WebClient().UploadValues(url, new NameValueCollection() { { "xml", "test" } }));