Tôi đang cố gắng sử dụng lớp System.Net.HttpWebRequest để thực hiện yêu cầu HTTP GET cho một máy chủ web cụ thể cho các ứng dụng web mà chúng tôi đã cân bằng tải trên nhiều máy chủ. Để đạt được điều này, tôi cần có thể thiết lập giá trị tiêu đề Máy chủ cho yêu cầu và tôi đã có thể đạt được điều này bằng cách sử dụng lớp System.Net.WebProxy.Cách đặt giá trị tiêu đề Máy chủ cho các yêu cầu SSL bằng cách sử dụng HttpWebRequest
Tuy nhiên, tất cả điều này đều bị hỏng khi tôi cố gắng thực hiện GET bằng SSL. Khi tôi cố gắng thực hiện điều này, lệnh gọi đến HttpWebRequest.GetResponse ném một System.Net.WebException, với mã trạng thái HTTP là 400 (Yêu cầu Xấu).
Là những gì tôi đang cố gắng để đạt được với HttpWebRequest, hoặc tôi nên tìm kiếm một cách khác để thực hiện những gì tôi muốn?
Đây là mã tôi đã sử dụng để thử và nhận tất cả điều này để làm việc: -
using System;
using System.Web;
using System.Net;
using System.IO;
namespace UrlPollTest
{
class Program
{
private static int suffix = 1;
static void Main(string[] args)
{
PerformRequest("http://www.microsoft.com/en/us/default.aspx", "www.microsoft.com");
PerformRequest("https://www.microsoft.com/en/us/default.aspx", "");
PerformRequest("https://www.microsoft.com/en/us/default.aspx", "www.microsoft.com");
Console.WriteLine("Press any key to continue");
Console.ReadKey();
}
static void PerformRequest(string AUrl, string AProxy)
{
Console.WriteLine("Fetching from {0}", AUrl);
try
{
HttpWebRequest request = WebRequest.Create(AUrl) as HttpWebRequest;
if (AProxy != "")
{
Console.WriteLine("Proxy = {0}", AProxy);
request.Proxy = new WebProxy(AProxy);
}
WebResponse response = request.GetResponse();
using (Stream httpStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(httpStream))
{
string s = reader.ReadToEnd();
File.WriteAllText(string.Format("D:\\Temp\\Response{0}.html", suffix++), s);
}
}
Console.WriteLine(" Success");
}
catch (Exception e)
{
Console.WriteLine(" " + e.Message);
}
}
}
}
Câu hỏi chính hãng: Làm thế nào để bạn biết mình cần một tiêu đề lưu trữ? "Tiêu đề lưu trữ HTTP 1.1 không được hỗ trợ khi bạn sử dụng SSL" http://support.microsoft.com/kb/187504. – russau
Suy nghĩ thứ hai: bạn có thể tải tệp qua SSL trong trình duyệt không? – russau
Tôi cần đặt tiêu đề Máy chủ để tôi có thể chỉ định máy chủ chính xác được truy cập nếu ứng dụng web được cân bằng tải trên nhiều máy chủ. Mã này là một phần của một khuôn khổ giám sát và kiểm tra web tôi đang viết. Và có, các yêu cầu SSL mà tôi đang cố gắng thực hiện sẽ hoạt động trong trình duyệt, do đó, vấn đề nằm ở đâu đó trong cách tôi đang cố triển khai chức năng tương tự trong mã. Bài viết bạn đã liên kết gợi ý rằng hỗ trợ tiêu đề Máy chủ cho các yêu cầu SSL đã có sẵn trong Windows Server 2003 SP1 và tất cả các máy chủ của chúng tôi sẽ được vá hoàn toàn. – Cleggy