[通过HttpWebRequest请求https接口]

一.为什么进行代理接口的开发:

有些项目需要访问被墙了哒网站,比如前不久公司开发项目需要使用google地图的接口,而google在中国被墙了,所有打算做一个代理接口服务,将代理放到国外服务器上,通过访问该代理,在代理上请求google地图的接口,实现访问。然而访问的接口通信是采用的https通信,存在证书验证,使用httprequest请求时候需要带上证书进行验证,才能建立正确的链接。(在前一面一篇博客中已经写了如和下载https通信需要的证书)

二.使用HttpWebRequest请求https接口:

新建立mvc项目,添加ProxyApi控制器,在构造函数处验证证书.

        public ProxyApiController()
        {
            ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(VerifyServerCertificate);
        }

        private bool VerifyServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }

添加Test 的Action,这里需要将被墙的域名添加到配置中,避免被运营商截取到,检查出是访问被墙域名,避免被截掉。后面的parm是请求参数

       public ActionResult Test()
        {
            try
            {
                string url = ConfigurationManager.AppSettings["domain"] + Request["parm"];
                string result = Get(url);
                return Content(result);
            }
            catch (Exception ex)
            {
                return Content("ERROR:MapAgent>>"+ex.Message);
            }
        }
进行HttpWebRequest :Get请求,此处的证书是之前翻墙查看到的证书,使用ie浏览器下载的证书,此处的certificate是证书所在绝对路径。

        private string Get(string url)
        {
            try
            {
                X509Certificate Cert = X509Certificate.CreateFromCertFile(ConfigurationManager.AppSettings["certificate"]); //证书存放的绝对路径
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.ClientCertificates.Add(Cert);
                request.KeepAlive = true;
                request.Method = "get";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = 0;
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36";

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                Stream stream = response.GetResponseStream();
                StreamReader reader = new StreamReader(stream, Encoding.UTF8);
                string result = reader.ReadToEnd();
                return result;
            }
            catch (Exception ex)
            {
                return "ERROR>>" + ex.Message + " URL:" + url;
            }
        }
将web发布后布置到国外的服务器,配置好证书地址和需要访问的被墙的谷歌地图域名https://maps.googleapis.com/,将可变的参数进行传递拼接,使用HttpWebRequest进行请求访问,就完成了简单的代理web服务开发。






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值