我在经典ASP中有以下片段,用于通过SSL发送命令并检索响应:
Dim xmlHTTP
Set xmlHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")
xmlHTTP.open "POST", "https://www.example.com", False
xmlHTTP.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
xmlHTTP.setRequestHeader "Content-Length", Len(postData)
xmlHTTP.Send postData
If xmlHTTP.status = 200 And Len(message) > 0 And Not Err Then
Print xmlHTTP.responseText
End If
然后我使用这段代码作为参考,在c#中重新实现了请求:
private static string SendRequest(string url, string postdata)
{
WebRequest rqst = HttpWebRequest.Create(url);
// We have a proxy on the domain, so authentication is required.
WebProxy proxy = new WebProxy("myproxy.mydomain.com", 8080);
proxy.Credentials = new NetworkCredential("username", "password", "mydomain");
rqst.Proxy = proxy;
rqst.Method = "POST";
if (!String.IsNullOrEmpty(postdata))
{
rqst.ContentType = "application/x-www-form-urlencoded";
byte[] byteData = Encoding.UTF8.GetBytes(postdata);
rqst.ContentLength = byteData.Length;
using (Stream postStream = rqst.GetRequestStream())
{
postStream.Write(byteData, 0, byteData.Length);
postStream.Close();
}
}
((HttpWebRequest)rqst).KeepAlive = false;
StreamReader rsps = new StreamReader(rqst.GetResponse().GetResponseStream());
string strRsps = rsps.ReadToEnd();
return strRsps;
}
问题是,当调用GetRequestStream时,我不断收到一个WebException,消息为"The remote server returned an error: (502) Bad Gateway."
起初我以为这与SSL证书验证有关。所以我添加了这一行:
ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();
哪里
public class AcceptAllCertificatePolicy : ICertificatePolicy
{
public bool CheckValidationResult(ServicePoint srvPoint,
System.Security.Cryptography.X509Certificate certificate,
WebRequest request,
int certificateProblem)
{
return true;
}
}
同样的502错误。有什么想法吗?
5条答案
按热度按时间yhqotfr81#
读取错误响应的实体正文。它可能会对正在发生的事情有所暗示。
代码如下:
这应该显示错误响应的完整内容。
kx5bkwkv2#
在此帮助下,我对问题进行了更详细的描述:代理正在返回消息:“无法识别用户代理”,所以我手动设置。另外,我将代码更改为使用GlobalProxySelection.GetEmptyWebProxy(),如here所述。最后的工作代码包括在下面。
ryhaxcpt3#
我之所以会遇到这种情况,是因为如果Java应用程序没有及时响应,远程机器上的Java代理就会对请求进行超时,从而使.NET默认超时变得毫无用处。下面的代码循环遍历所有异常并写出响应,这有助于我确定它实际上来自代理:
来自代理的响应体看起来像这样:
ryhaxcpt4#
UserAgent丢失
例如:
fd3cxomn5#
Web服务的wsdl可能正在与域名和SSL证书“争论”。IIS将使用IIS注册的域名(默认情况下是本地域上的计算机名,不一定是您的Web域)自动生成Web服务的WSDL。如果证书域与SOAP12地址中的域不匹配,您将收到通信错误。