HTTPWebRequest GET请求导致SSL连接问题

时间:2016-02-23 14:16:13

标签: c# asp.net web-services rest

我正在尝试连接到RESTful API,当我从浏览器访问URL时,我收到一条错误消息,指出我错过了标题,这是我期望得到的。当我使用下面的代码连接到同一个URL时,我收到错误声明"底层连接已关闭:发送时发生意外错误。 ---> System.IO.IOException:身份验证失败,因为远程方已关闭传输流"。如果我使用相同的代码并将URL更改为Google.com,那么它可以正常工作,并添加我从浏览器到API URL的连接将在API服务器上的Apache日志中生成一个条目,但是下面代码没有。有没有人有任何想法,为什么我会得到这个错误?

        var httpWebRequest = (HttpWebRequest)WebRequest.Create("HTTPS://URL.COM");

        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "GET";

        string html = string.Empty;
        try
        {
            HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse();
            string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();



            Response.Write(responseString);
        }
        catch (Exception ex)
        {
            Response.Write(ex.ToString());
        }

更新:我尝试使用HttpClient并得到了相同的结果:

        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri("https://url.com/");

        // Add an Accept header for JSON format.
        client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = client.GetAsync("v1/person").Result;

        if (response.IsSuccessStatusCode)
        {
            Response.Write(response);

        }
        else
        {
            Response.Write(response);
        }

更新2:下面的代码行似乎解决了这个问题。我现在正在等待确认。我仍然有点困惑,为什么这是必需的。

    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

0 个答案:

没有答案