【C# 工具类】HttpUitls_陌湘萘的博客-程序员宅基地

技术标签: C#  chrome  json  http  

最近用C#做完了一个项目,分享一个良心技术博客。

第一章:C#如何拿到从http上返回JSON数据?

第二章:C#如何解析JSON数据?(反序列化对象)

第三章:C#如何生成JSON字符串?(序列化对象)

第四章:C#如何生成JSON字符串提交给接口(服务器)

在这个可用的HttpUitls工具类的基础上,老陌补充了几行(authorization+验证证书),亲测可用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Web;
using System.Windows.Forms;

namespace Test
{
    class HttpUitls
    {
        public static string Get(string Url)
        {
           // System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
            //System.GC.Collect();
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Proxy = null;
            request.KeepAlive = false;
            request.Method = "GET";
            request.ContentType = "application/json; charset=UTF-8";
            request.AutomaticDecompression = DecompressionMethods.GZip;

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
            string retString = myStreamReader.ReadToEnd();

            myStreamReader.Close();
            myResponseStream.Close();

            if (response != null)
            {
                response.Close();
            }
            if (request != null)
            {
                request.Abort();
            }

            return retString;
        }

        public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)

        {

            if (sslPolicyErrors == SslPolicyErrors.None)

                return true;

            return false;

        }
        public static string Post(string Url, string Data, string Referer)
        {           
                //添加验证证书的回调方法
                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            request.Referer = Referer;
            byte[] bytes = Encoding.UTF8.GetBytes(Data);
            request.ContentType = "application/json";                  
            // request.ContentType ="application/x-www-form-urlencoded";
            request.ContentLength = bytes.Length;           
            
                //Add authorization
                string username = "username";
                string password = "password";
                //注意这里的格式为 "username:password"
                string usernamePassword = username + ":" + password;
                CredentialCache mycache = new CredentialCache();
                mycache.Add(new Uri(Url), "Basic", new NetworkCredential(username, password));
                request.Credentials = mycache;
                request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)));
            
                X509Certificate cerBook = new X509Certificate(Application.StartupPath+@"\mycert.pfx", "password"); //證書放在exe同一路徑
                request.ClientCertificates.Add(cerBook);

            Stream myResponseStream = request.GetRequestStream(); 
            myResponseStream.Write(bytes, 0, bytes.Length);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
            string retString = myStreamReader.ReadToEnd();

            myStreamReader.Close();
            myResponseStream.Close();

            if (response != null)
            {
                response.Close();
            }
            if (request != null)
            {
                request.Abort();
            }
            return retString;
        }

}
}

另,分享一个JSON转换C#实体类的工具:JSON转C#实体类-BeJSON.com

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_28782331/article/details/107026530

智能推荐

maven-配置私服-3-程序员宅基地

私服下载地址:http://www.sonatype.org/nexus/Go/一、下载maven私服并解压到指定的文件夹二、配置环境变量右击电脑属性 - 高级系统设置 - 环境变量 -在系统环境变量找到PATH选择编辑。写上刚解压的文件路径,分号结尾。三、打开CMD输入nexus出现上方提示说明环境变量配置成功。四、安装n

android两个ListView同步滚动_listview 循环滚动 三行三列-程序员宅基地

我在网上看到大多数专家讲解的都是设置setOnScrollListener滑动监听,但是个人感觉设置滑动监听比较麻烦,感觉使用事件分发来做比较简单;实现思路:首先来线下整体布局,是使用一个横向的线性布局里面放了两个ListView,使用权重让两个ListView平分屏幕的宽。如果想使用View的事件分发,必须自定义这个View,这里面实现起来也非常简单,只是自定义一个线性布局继承系_listview 循环滚动 三行三列

理解——先序遍历是入栈过程,中序遍历是出栈过程_先序入栈,中序出栈-程序员宅基地

遇到这样一道题:先序序列为a,b,c,d的不同二叉树的个数是多少?那到这个题首先要知道二叉树的先序遍历,中序遍历都需要使用栈,二叉树的中序遍历https://blog.csdn.net/qq_26460841/article/details/84138310..._先序入栈,中序出栈

mysql事务和 MySQL 加锁处理分析(原文博客讨论太激烈了,看评论可以看一天,这篇文章也没看完)-程序员宅基地

原文地址:http://hedengcheng.com/?p=771#_Toc374698322背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨

浮点数取整_.net 浮点数取整数-程序员宅基地

Math.Floor()取整Math.Round()是四舍五入取整_.net 浮点数取整数

ogg格式文件转换为MP3格式_unknown encoder 'libmp3lame-程序员宅基地

libmp3lameffmpegUnknown encoder ‘libmp3lamemp3ogg_unknown encoder 'libmp3lame

随便推点

#教你从零制作拟辉光管时钟#-程序员宅基地

物联网拟辉光管时钟_拟辉光管时钟

ssl协议及开源实现openssl-程序员宅基地

ssl协议SSL: (Secure Socket Layer)安全套接层,ssl是一套安全协议,被应用层调用,当http调用ssl协议时被称为https,当ftp调用ssl协议时被称为sftp。 lls是一个协议的集合 ,其中包括: Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换 ChangeCipherSpec 协议:一条消息表明握手协议已

机器学习与深度学习_机器学习系统可以是训练出来-程序员宅基地

1、首先,机器学习系统是训练出来的,而不是明确的有代码编写出来;它的迅速发展来自更好更快的硬件和更大更多的数据集。但是由于经常需要处理大量的数据集,传统的统计分析(贝叶斯分析)是不切实际的,而深度学习呈现较少的统计学理论;并且以工程为导向;从而发展的极为迅速;2、机器学习的三个要素主要是输入数据点,预期输出的示例,衡量算法好坏的方法;3、机器学习模型将输入数据变换为有意义的输出,也就是为了数据寻找合适的表示——对数据进行变换;其中的学习指的就是寻找更好的数据表示的自动搜索过程;4、机器学习是从数_机器学习系统可以是训练出来

prim算法构造最小生成树_下面是一个有6个节点的图,各节点之间的边及权值如图所示,试用k方法求这个图的最小-程序员宅基地

prim算法构造最小生成树1.问题假设G=(V,E)是连通的,TE是G上最小生成树中边的集合。算法从U={u0}(u0∈V)、TE={}开始。重复执行下列操作:在所有u∈U,v∈V-U的边(u,v)∈E中找一条权值最小的边(u0,v0)并入集合TE中,同时v0并入U,直到V=U为止。此时,TE中必有n-1条边,T=(V,TE)为G的最小生成树。2.解析算法过程如下图所示:(1)图..._下面是一个有6个节点的图,各节点之间的边及权值如图所示,试用k方法求这个图的最小

PB调用GetUrl()函数实例(搜集)_pb geturl-程序员宅基地

转自:https://blog.csdn.net/u19xiaolr/article/details/102665406另一个:https://blog.csdn.net/ribut9225/article/details/52640438语法:Syntaxservicereference.GetURL ( urlname, data )Argument..._pb geturl

我用python爬虫挣钱的经历_一个Python小白的5个小时爬虫经历_h佳与的博客-程序员宅基地

前言最近业余在做一个基于.NETCore的搜索项目,奈何基层代码写好了,没有看起来很华丽的数据供测试。很巧的也是博客搜索,于是乎想到了博客园。C# 也能做做页面数据抓取的,不过在博客园看到的大部分都是python实现,所以就临时想了一下看看python到底是什么东东。不看基础语法,不看语言功能,直接上代码,哪里不会搜哪里。代码完成总共用时大概4个小时,其中搭建环境加安装BeautifulSoup大..._python爬虫和数据分析哪个赚钱