如何在带有SSL的C#中使用HTTP GET请求?(违反协议)

如何在带有SSL的C#中使用HTTP GET请求?(违反协议),c#,http,ssl,C#,Http,Ssl,我目前正在尝试从一个在C#中使用SSL的服务器获取响应。我有Java的代码来做这件事,但是看起来他们没有1:1的翻译 我发现有些代码适用于常规页面,但不适用于我需要的页面(可能是因为SSL)。代码如下: WebRequest request = WebRequest.Create("https://" + sslServerHost + ":" + sslServerPort); request.Proxy = null; request.Credentials

我目前正在尝试从一个在C#中使用SSL的服务器获取响应。我有Java的代码来做这件事,但是看起来他们没有1:1的翻译

我发现有些代码适用于常规页面,但不适用于我需要的页面(可能是因为SSL)。代码如下:

        WebRequest request = WebRequest.Create("https://" + sslServerHost + ":" + sslServerPort);
    request.Proxy = null;
    request.Credentials = CredentialCache.DefaultCredentials;

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Stream dataStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(dataStream);
    string responseFromServer = reader.ReadToEnd();
更新:抱歉,我似乎忘记了错误是什么。我在“HttpWebResponse=(HttpWebResponse)request.GetResponse();”行收到一个协议冲突异常。
有什么想法吗?谢谢大家。

只是一个想法,但你们试过最后一个“/”吗?此外,您可能会发现这种方法更容易:

string s;
using(WebClient client = new WebClient()) {
    client.UseDefaultCredentials = true;
    s = client.DownloadString("https://" + sslServerHost + ":"
       + sslServerPort + "/");
}

SSL上的HTTP会话使用正确颁发的证书进行验证

您可以使用RemoteCertificateValidationCallback委托验证SSL证书,如下所示:

public static void ConnectSSL()
{

    WebRequest request = WebRequest.Create("https://" + sslServerHost + ":" + sslServerPort);
    request.Proxy = null;
    request.Credentials = CredentialCache.DefaultCredentials;

   //allows for validation of SSL certificates 

    ServicePointManager.ServerCertificateValidationCallback += new  System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Stream dataStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(dataStream);
    string responseFromServer = reader.ReadToEnd();

}

//for testing purpose only, accept any dodgy certificate... 
public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
          return true; 
}

下面是一些我成功用于测试SSL连接的测试代码

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.dscoduc.com");
//request.Method = "HEAD";
//request.AllowAutoRedirect = false;
request.Credentials = CredentialCache.DefaultCredentials;

// Ignore Certificate validation failures (aka untrusted certificate + certificate chains)
ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true); 

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
StreamReader reader = new StreamReader(resStream);
string responseFromServer = reader.ReadToEnd();

Amber:你能描述一下出了什么问题吗?只是没有返回结果吗?你有什么例外吗?如果是,什么样的异常,以及消息是什么?可能是不受信任的证书问题?谢谢您的建议,但不要冒险。请确保正确处理HttpWebResponse,或者至少在finally块中调用Close()!