我最初使用 WebRequest 和 WebResponse 来发送 Http Post 消息。我总是得到“OK”的回应。我发布的消息是使用 xml 中的证书签名的 XML。
组成如下:发送到 https 网站的 C# 服务。HTTPS 网站在另一个我不能说的地方。HTTPS 本地网站,它只是接收我在本地发布的消息并将结果写入文件。只是为了模拟其他网站正在获得什么。
本地网站使用自签名证书签名,将于 2048 年到期。
直到本周,这段代码都运行良好。我总是张贴并得到一个好的。在这两个网站上。但本周测试和真正的项目实施都进入了 Kaput。在两个网站上。
在本地网站上,它说无法连接到 SSL。这个问题是由自签名证书引起的,由于某种原因超出了我的理解,它给了地狱。感谢这里的问题,我刚刚验证了证书始终是真实的,现在它不再有问题了。
要解决此问题,只需编写以下代码:
ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();
在您的应用程序开始时。所以它只运行一次。
剩下的问题是“远程服务器返回错误:(503)服务器不可用。”。我在浏览器中输入 URL,它对我来说很好。在该网站的代码中没有收到任何内容,当它进入网络响应时,它给了我上述错误
我做了一个仅发送“Testing 1 2 3”的测试应用程序,但我不断收到错误消息。我也将它发送到哈佛 https 网站,没有错误。
private void btnSend_Click(object sender, EventArgs e)
{
try
{
WebRequest req = WebRequest.Create(cboUrl.Text);
req.PreAuthenticate = true;
req.UseDefaultCredentials = true;
req.Method = "POST";
req.ContentType = "text/xml";
String msg = txtMsg.Text;
using (Stream s = req.GetRequestStream())
{
try
{
s.Write(
System.Text.ASCIIEncoding.ASCII.GetBytes(msg), 0, msg.Length);
}
finally
{
s.Close();
}
}
WebResponse resp = req.GetResponse();
StreamReader str = new StreamReader(resp.GetResponseStream());
txtRes.Text = str.ReadToEnd();
}
catch (WebException ex)
{
txtRes.Text = ex.Message;
}
catch (Exception ex)
{
txtRes.Text = ex.Message;
}
}
这是我从网上找到的另一个例子:
private void button1_Click(object sender, EventArgs e)
{
try
{
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(cboUrl.Text);
myReq.Headers.Clear();
myReq.Method = "POST";
myReq.KeepAlive = false;
myReq.ProtocolVersion = HttpVersion.Version11;
myReq.ContentType = "text/xml";
myReq.Proxy = null;
myReq.Credentials = null;
myReq.ContentLength = txtMsg.Text.Length;
using (StreamWriter sendingData = new StreamWriter(myReq.GetRequestStream()))
{
sendingData.Write(txtMsg.Text);
sendingData.Flush();
sendingData.Close();
}
HttpWebResponse myResponse = (HttpWebResponse) myReq.GetResponse();
StreamReader responseStream = new StreamReader(myResponse.GetResponseStream());
txtRes.Text = responseStream.ReadToEnd();
responseStream.Close();
myResponse.Close();
}
catch(WebException ex )
{
txtRes.Text = ex.Message;
}
catch (Exception ex)
{
txtRes.Text = ex.Message;
}
}
更新
错误是我用 httpwebrequest 调用的那个需要一些我没有提供的 httpheaders。在唯一发生的事情是我得到“OK”响应之前。他们修复了他们的代码,我修复了我的代码,现在它可以工作了。
如果它发生在其他人身上,请像下面所说的那样检查代理设置,并检查另一方是否给出异常或什么都不返回。