c#中HttpWebRequest使用Proxy實現指定IP的網域名稱請求

來源:互聯網
上載者:User
文章目錄
  • 怎麼辦呢?
  • 參考代碼如下(代碼來自參考資料一):

我有這麼一個需求:

     一個網域名稱,xxx.com,它後面其實有很多個iP:比如:

  • 1.2.3.4,
  • 5.6.7.8,
  • 9.10.11.12

這些ip上面都有同樣的網站,網域名稱解析的時候會隨機分配一個ip給你(這個就是DNS負載平衡)。

但是現在假如我想訪問一個特定IP的上的網站,比如5.6.7.8上的網站,但是由於網站限制了必須通過網域名稱才能訪問,直接把網域名稱改成ip地址形成的url如:http://5.6.7.8/,這樣子是不行的。

怎麼辦呢?

有兩種方法:

1. 修改Hosts檔案,指定xxx.com 解析到5.6.7.8 上面去。

2. 使用http://5.6.7.8/這個url,不過在請求包的head頭裡增加一句:

Host:xxx.com

 

由於我是通過C#代碼來實現這個功能,所以就想通過第2種方法解決。

 

C#中是用HttpWebRequest類來實現擷取一個http請求的。它有一個Header的屬性,可以修改Header裡頭的值。不過查詢MSDN得知,這個Host標識是沒辦法通過這種方法修改的。如果你這麼使用:

httpWebRequest.Headers["Host"] =”xxx.com”;

它會拋出一個異常出來:

ArgumentException: The 'Host' header cannot be modified directly。

那還能不能實現上面的需求呢?答案是能,不過方法要改一下:

Url裡面還是使用網域名稱:

http://xxx.com/

設定HttpWebRequest的Proxy屬性為你想訪問的IP地址即可,如下:

httpWebRequest.Proxy = new WebProxy(ip.ToString());

 

參考代碼如下(代碼來自參考資料一):
using System;using System.IO;using System.Net;namespace ConsoleApplication1{    class Program    {        public static void Main(string[] args)        {            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.example.com/Default.aspx");            System.Net.WebProxy proxy = new WebProxy("208.77.186.166", 80);            request.Proxy = proxy;            using (WebResponse response = request.GetResponse())            {                using (TextReader reader = new StreamReader(response.GetResponseStream()))                {                    string line;                    while ((line = reader.ReadLine()) != null)                        Console.WriteLine(line);                }            }        }    }}

 

這樣子就實現了指定IP的網域名稱請求。

附:有人已經向微軟反饋了無法修改host頭的問題,微軟反饋說下一個.Net Framewok中將增加一個新的Host屬性,這樣子就可以修改Host頭了。

原文:

Microsoft 在 2009/5/26 13:37 發送

The next release of the .NET Framework will include a new "Host" property. The value of this property will be sent as "Host" header in the HTTP request.

參考資料:

  1. HttpWebRequest.Headers["Host"] throws an unexpected exception
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.