How to specify server IP in HttpWebRequest

I was writing an HTTP proxy during last weeks. I need to address the origin server with a custom IP address, but I should keep the "Host" header.

I googled about "HttpWebRequest set server IP", "WebRequest modify Host", etc. I read through several posts, and realized:

  • When HttpWebRequest is created, the "Host" header is automatically set to the "host:port" portion of the Uri.
  • Attempt to modify HttpWebRequest.Headers["Host"] will throw an exception.
  • The server IP address of the HTTP Request is determined by the host portion of the Uri, and is automatically resolved against the DNS server.
  • When HttpWebRequest.Proxy is set to use a proxy, the server IP address is determined by resolving the host of Proxy property. I can set the origin server as the proxy, this is called "Proxy hack".
  • When using a proxy, the HTTP Request-Line looks like "GET http://host/ HTTP/1.1" rather than "GET / HTTP/1.1". Every HTTP/1.1 compliant origin server should accept this, but firewalls may think it's a "proxy request" and block it, and some non-compliant servers does not accept it.

SOLUTION

My purpose is: make HttpWebRequest send its request to a custom IP address, but leave the Request-Line as "GET / HTTP/1.1".

.Net介绍 & Visual Studio 2008 下载地址

.Net Framework是微软主导设计的一个开发框架,它是COM的继承者。最新版本为3.5,而2.0和3.0版本已经通过自动更新安装在每一台 WinXP/2003机器上。微软的.Net Framework不是开源的,可以在WindowsNT和FreeBSD系统上安装;.Net Framework的一个开源实现是mono-project,可以在LINUX和Windows等系统上安装;这两种实现是几乎完全兼容的。

.Net是一个开放的框架,编程语言只需兼容CLS(Common Language Specification),即可用于.Net。其编译程序只有“前端”,即翻译成一种中间语言,这种中间语言是MSIL;而“后端”就是由安装在每一台机器上的Framework在运行时完成的,称为JIT(Just In Time)编译。.Net语言有C#、VB.NET、C++.NET、JScript.NET、MSIL汇编等,超过20种;程序员可以选择任何一款自己喜欢的语言进行开发,而无需担忧开发结果的兼容性——因为编译后都变成了MSIL这种中间语言;其中C#是为.Net度身定做的,如果你是初学者建议学习C#,此外VB.NET也是一种常用的语言。

Visual Studio 2008是.Net Framework 3.5的一个集成开发环境,这个开发环境由微软发布;.Net是一个开放的框架,因此也存在其他的集成开发环境;你甚至可以只安装Framework,而不安装任何集成开发环境。官方介绍与下载页面 http://msdn2.microsoft.com/en-us/vstudio/default.aspx。VS2008有多个版本,其中免费的精简版本称为Express版本。【原来这里有一个本地下载链接,由于有人使用迅雷下载,盗链严重,现已删除;请珍爱网络,远离迅雷!】

ImageResizer批量图片缩小工具

把自己的电脑重装成Windows2003操作系统后,发现以前经常使用的一个图片缩小工具Windows XP Image Resizer Powertoy不能安装了。 我经常需要将大量图片发到网站上,每个图片都用ACDSee或者Photoshop手动缩小,太麻烦了。 于是花了半个小时用C#写了个简单的批量图片缩小工具,可以快速将一个目录中的所有jpg图片缩小成指定尺寸(当然放大也可以)。

程序需要.NET Framework 2.0或以上版本的支持。 原版编写于2007年9月28日,2011年12月29日修正内存泄漏bug。

下载ImageResizer(含源码)