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

有些项目需要访问被墙了哒网站,比如前不久公司开发项目需要使用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请求,此处的证书是之前FQ查看到的证书,使用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 = ;
                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服务开发。

通过HttpWebRequest请求https接口的更多相关文章

  1. 使用HttpWebRequest请求API接口以及其他网站资源

    很多时候,我们项目需要其他网站的资源,而这个被请求的网站可能属于你们自己开发管理的网站.也可能是公网上其他网站对外开发的API接口,比如说腾讯的微信公众平台的API接口.各大短信服务商的短信API接口 ...

  2. HttpWebRequest请求Https协议的WebApi

    public static class RequestClient { /// <summary> /// 参数列表转为string /// </summary> /// &l ...

  3. 带jsk证书,请求https接口

    首先是三个返回的实体类 BaseVo.java package https2; import java.io.Serializable; import java.lang.reflect.Invoca ...

  4. PHP Curl请求Https接口

    在请求http的时候只需要 file_get_contents("http://www.sojson.com/open/api/weather/json.shtml?city=$Positi ...

  5. Vue-cli 本地开发请求https 接口 DEPTH_ZERO_SELF_SIGNED_CERT

    环境:npm run dev 本地开发连接后台的开发环境的接口. 贴上proxyTable 的转发(代理?反向?这个具体叫什么不明白...) proxyTable: { "/api" ...

  6. 使用HttpWebRequest请求https链接时,无法访问的问题,设置ServicePointManager.SecurityProtocol安全协议

    //请求前设置一下使用的安全协议类型 System.Net if (url.StartsWith("https", StringComparison.OrdinalIgnoreCa ...

  7. 转Postman请求Https接口

    转自:https://blog.csdn.net/ONS_cukuyo/article/details/79172242 单向认证 像平常一样访问就行,无需做任何处理,只需要把http://变成htt ...

  8. 请求https接口时报错:Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificat,安装certifi

    如何解决SSL 根证书验错误: 一种解决方法是:verify=False 在session.request 里面: session.post(post_url,data=post_data,heade ...

  9. python 使用requests 请求 https 接口 ,取消警告waring

    response = requests.request("POST", url, timeout=20, data=payload, headers=headers, proxie ...

随机推荐

  1. Java程序员的日常 —— 注册工厂的妙用

    注册工厂是一种很常用的框架书写方法,它适合于快速创建相同类型的对象. 举个栗子 比如一个家具工厂,有沙发.椅子.茶几等等,正常的编程模式是这样的: //创建 class 沙发{} class 椅子{} ...

  2. Atitit 修改密码的功能流程设计 attilax总结

    Atitit 修改密码的功能流程设计 attilax总结 1.1. 注意点1 1.2. 设计修改用户密码功能时把用户ID保存在哪里?1 1.3. Ui设计1 1.4. 功能设计源码1 1.5. Agt ...

  3. javascript_core_06之正则、Math、Date

    1.RegExp:Regular Expression,创建封装正则表达式: ①正则直接量:var reg=/reg/ig:②var reg=new RegExp(“reg”,“ig”): 2.Reg ...

  4. Nokia Lumia通过电脑来升级Windows Phone 8.1

    现在基本上所有lumia都推送了WP 8.1了,不过,有些朋友说在更新过程中常常断线,导致要重新下载.不知道是不是我的人品比较正能量,我从预览版升级,到正式版升级,都没有出现断网现象,每次都能顺利更新 ...

  5. KlayGE 4.4中渲染的改进(五):OpenGL 4.4和OpenGLES 3

    转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2796 上一篇我们提到了SSSSS,作为本系列的最后一篇,本文将介绍KlayGE 4.4的Op ...

  6. Render OpenCascade Geometry Surfaces in OpenSceneGraph

    在OpenSceneGraph中绘制OpenCascade的曲面 Render OpenCascade Geometry Surfaces in OpenSceneGraph eryar@163.co ...

  7. js 获得radio的值

    var tmp = document.getElementsByName("foodtype"); for(var i=0; i<tmp.length; ++i) if(tm ...

  8. Deep learning:四十一(Dropout简单理解)

    前言 训练神经网络模型时,如果训练样本较少,为了防止模型过拟合,Dropout可以作为一种trikc供选择.Dropout是hintion最近2年提出的,源于其文章Improving neural n ...

  9. Crumpet – 使用很简单的响应式前端开发框架

    Crumpet 是一个简单的响应式的基于 SASS/SCSS 的响应式前端框架,保持你的 HTML 代码简洁.内置尽量使用占位符选择器,以减少你的 HTML 标记的大小,没有凌乱的 HTML 代码.快 ...

  10. 页面copyright部分始终居于页面底部

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...