c#中HttpWebRequest使用Proxy实现指定IP的域名请求
我有这么一个需求:
一个域名,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/,这样子是不行的。
怎么办呢?
有两种方法:
- 修改Hosts文件,指定xxx.com 解析到5.6.7.8 上面去。
- 使用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.
参考资料:
HttpWebRequest.Headers["Host"] throws an unexpected exception
c#中HttpWebRequest使用Proxy实现指定IP的域名请求相关推荐
- Python request请求指定ip的域名
python3: import requestsrequests.get('https://192.168.100.6',headers={'Host':'test.com'},verify=Fals ...
- php 屏蔽curl访问,php curl指定ip,php curl请求忽略本地host文件,php curl请求跳过本地host文件...
假如我们使用curl请求一个网站,如果这个网站域名在本地host中也存在,curl默认会请求本地,但是我们可以自己设置解析到哪个ip. (1).设置朋友的博客网站主机和ip,请求测试正确返回远程网站内 ...
- 如何在金仓数据库KingbaseES中指定IP登录
关键字 KingbaseES,指定IP 问题描述 如何在金仓数据库KingbaseES中指定IP登录? 解决方案 1. 修改data目录下sys_hba.conf文件 2. 进行IP修改,重启服务,在 ...
- Mysql中怎样设置指定ip远程访问连接
场景 Mysql安装在远程的Windows 服务器上,需要配置使指定的ip可以访问. 如果没有提前配置指定ip,那么在访问时就会提示: 注: 博客: https://blog.csdn.net/bad ...
- C#中HttpWebRequest、WebClient、HttpClient 、HttpClientFactory Flurl、的使用总结
C#中HttpWebRequest.WebClient.HttpClient .HttpClientFactory. Flurl的使用总结 三者的区别 HttpWebRequest 命名空间: Sys ...
- Python中使用中文正则表达式匹配指定的中文字符串
业务场景: 从中文字句中匹配出指定的中文子字符串 .这样的情况我在工作中遇到非常多, 特梳理总结如下. 难点: 处理GBK和utf8之类的字符编码, 同时正则匹配Pattern中包含汉字,要汉字正常发 ...
- QEMU-KVM自己主动创建虚拟机,以指定IP构造
正在使用qemu不能指定创建虚拟机的过程IP住址,然而,在实际应用中,我们需要有一台虚拟机IP住址,不是人为的虚拟机操作系统配置. 于qemu虚拟机技术文档(http://qemu.weilnetz. ...
- 只允许指定IP远程桌面连接_使用IP安全策略
一,新建IP安全策略 WIN+R打开运行对话框,输入gpedit.msc进入组策略编辑器. 依次打开"本地计算机"策略--计算机配置--Windows设置--安全设置--IP安全策 ...
- php 根据ip 扫描端口,python实现指定ip端口扫描方式
在Linux中判断一台主机是否可达,可以使用ping命令,而判断端口是否打开,可以使用telnet命令,但是telnet命令没有超时时间的参数,使用起来不是很方便,那么可以利用Python来完成一个端 ...
- windows服务器指定IP地址才能进行远程访问桌面设置方法
这篇文章主要介绍了windows服务器指定IP地址才能进行远程访问桌面设置方法,需要的朋友可以参考下 一般情况下分两种方法: 第一种是通过 防火墙来实现 等保测评要求:对服务器限制远程终端登录地址 于 ...
最新文章
- 好东西+php,推荐个好东西swoole,php如虎添翼
- 【100题】 第四十七题 序列的最长递增、递减序列
- Netlog 的数据库及 LAMP 架构
- python游戏-零基础python教程-用Python设计你的第一个小游戏
- Eclipse上搭建SSH(struts-2.2.3 + spring-2.5.6 + hibernate-3.6.8)框架-附源码
- Transformer 在美团搜索排序中的实践
- Interview:算法岗位面试—10.10下午—上海某银行算法岗位(偏数据分析,四大行之一)的技术面—关于项目的考察
- AIProCon在线大会笔记之阿里达摩院司罗:为商业搭建语言桥梁
- mysql into_MYSQL中replace into的用法
- django 轮播图上传_django之动态轮播图技术的实现
- 【OpenCV 例程200篇】84. 由低通滤波器得到高通滤波器
- post的4个参数和ajaxReturn方法
- VIM查看空格,换行,TAB键
- 【MySQL学习】Unknown column 'PASSWORD'|Access denied for user 'root'@'localhost'
- 6.支付平台架构:业务、规划、设计与实现 --- 安全与风控
- VMware View虚拟桌面在安卓平板电脑上的演示
- Spring DeferredResult 实现长轮询
- 微信小程序云函数 -- 腾讯云通用印刷体识别应用
- wordpress主题_20种色彩缤纷的WordPress主题组合(免费和高级)
- 政府行政管理思维与互联网思维