Httpt请求
在c#中常见发送http请求的方式如下
- HttpWebRequest:
.net 平台原生提供,这是.NET创建者最初开发用于使用HTTP请求的标准类。使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面,如 timeouts, cookies, headers, protocols。
关于使用HttpWebRequest上传和下载文件,可参考:《c#使用Http上传下载文件》:https://blog.csdn.net/u010476739/article/details/105074171
- WebClient:
.net 平台原生提供,WebClient是一种更高级别的抽象,是HttpWebRequest为了简化最常见任务而创建的,但也因此缺少了HttpWebRequest的灵活性。
- HttpClient:
.net 平台原生提供,.net core 推荐使用HttpClient :https://blog.csdn.net/u010476739/article/details/119782562
HttpWebRequest 使用
1.获取token接口

1 private string gettoken()
2 {
3 // 测试环境登陆用户
4 //string username = "as";
5 //string password = "as";
6
7 string Token = string.Empty;
8 try
9 {
10 if (string.IsNullOrEmpty(username) && username == null && string.IsNullOrEmpty(password) && password == null)
11 throw new Exception("调用系统接口:获取token失败 用户名或密码不能发为空!");
12 var strParm = JsonConvert.SerializeObject(new
13 {
14 username = username,
15 password = password
16 });
17 //string url = "http接口地址"; // 测试系统地址
18
19 Encoding encode = System.Text.Encoding.Default;
20 Byte[] arrB = encode.GetBytes(strParm);
21 HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(url);
22 Request.Method = "POST";
23 Request.ContentType = "application/json"; // application/x-www-form-urlencoded
24
25 Request.ContentLength = arrB.Length;
26 //实例化写入请求的参数
27 using (Stream outStream = Request.GetRequestStream())
28 {
29 outStream.Write(arrB, 0, arrB.Length);
30 outStream.Close();
31 }
32
33 //接受http响应
34 HttpWebResponse myResponse = Request.GetResponse() as HttpWebResponse;
35 //读取http返回的数据流
36 Stream ReceiveStream = myResponse.GetResponseStream();
37
38 using (StreamReader reader = new StreamReader(ReceiveStream, Encoding.UTF8))
39 {
40 Token = reader.ReadToEnd();
41 reader.Close();
42 }
43 myResponse.Close();
44
45 JObject obj = JObject.Parse(Token);
46
47 var msg = obj.GetValue("msg").ToString();
48 if (msg != "操作成功")
49 throw new Exception(msg);
50
51 Token = obj.GetValue("token").ToString();
52 }
53 catch (Exception ex)
54 {
55 throw ex;
56 }
57 return Token;
58 }
2.获取信息接口+表头token串

1 private string GetbjMerial(JObject infostr)
2 {
3 var apiResult = new ResultMessage();
4 string result = string.Empty;
5 try
6 {
7 string url = "http接口地址"; // 测试系统地址
8
9 var para = JsonConvert.SerializeObject(infostr);
10
11 Encoding encode = System.Text.Encoding.Default;
12 Byte[] arrB = encode.GetBytes(para);
13
14 //获取token
15 string token = this.gettoken();
16
17 HttpWebRequest Request = HttpWebRequest.Create(url) as HttpWebRequest;
18 Request.Method = "POST";
19 Request.ContentType = "text/plain"; //"application/json";
20 Request.Headers.Add("Authorization", token);
21 Request.ContentLength = arrB.Length;
22 //实例化写入请求的参数
23 using (Stream outStream = Request.GetRequestStream())
24 {
25 outStream.Write(arrB, 0, arrB.Length);
26 outStream.Close();
27 }
28
29 //接受http响应
30 HttpWebResponse myResponse = Request.GetResponse() as HttpWebResponse;
31 //读取http返回的数据流
32 Stream ReceiveStream = myResponse.GetResponseStream();
33
34 using (StreamReader reader = new StreamReader(ReceiveStream, Encoding.UTF8))
35 {
36 result = reader.ReadToEnd();
37 reader.Close();
38 }
39 myResponse.Close();
40
41 }
42 catch (Exception ex)
43 {
44 throw ex;
45 }
46 return result;
47 }
2.1.获取token

public string gettoken()
{ string Token = string.Empty;
try
{
//入参
var par = new { a= db, b = login, password = password };
var strParm = JsonConvert.SerializeObject(new
{
@params = par
});
string url = “”; Encoding encode = System.Text.Encoding.Default;
Byte[] arrB = encode.GetBytes(strParm);
HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(url);
Request.Method = "POST";
Request.CookieContainer = new System.Net.CookieContainer();
Request.ContentType = "application/json"; // application/x-www-form-urlencoded Request.ContentLength = arrB.Length;
//实例化写入请求的参数
using (Stream outStream = Request.GetRequestStream())
{
outStream.Write(arrB, 0, arrB.Length);
outStream.Close();
} //接受http响应
HttpWebResponse myResponse = Request.GetResponse() as HttpWebResponse;
//读取http返回的数据流
Stream ReceiveStream = myResponse.GetResponseStream(); string mes = ""; using (StreamReader reader = new StreamReader(ReceiveStream, Encoding.UTF8))
{
mes = reader.ReadToEnd();
reader.Close();
}
myResponse.Close(); JObject obj = JObject.Parse(mes);
//dynamic resa = JsonConvert.DeserializeObject(mes); if (obj.Property("result") != null) // 存在结果集
{
JObject res= obj.GetValue("result").ToObject<JObject>();
if(res.GetValue("username").ToString() == login && res.GetValue("name").ToString() == login)
{
// 调用成功,获取token
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)Request.GetResponse(); var json = Newtonsoft.Json.JsonConvert.SerializeObject(response.Cookies); if (response.Cookies.Count > 0)
{
Token = response.Cookies[0].Name + "=" + response.Cookies[0].Value;
}
}
}
if(obj.Property("error") != null) // 失败
{
JObject res = obj.GetValue("error").ToObject<JObject>();
JObject resdata = res.GetValue("data").ToObject<JObject>(); throw new Exception("调用接口失败,错误信息:"+ res.GetValue("message").ToString() + " "+ resdata.GetValue("message").ToString());
} }
catch (Exception ex)
{
throw ex;
}
return Token;
}
通过返回接口的cookie中获取session_id作为获取数据接口的request请求的cookie调用接口。
2.2.根据2.1接口返回token结果获取数据

public dynamic GetData(string para)
{
var apiResult = new ResultMessage();
dynamic data ;
try
{
string url =""; Encoding encode = System.Text.Encoding.Default;
Byte[] arrB = encode.GetBytes(para); //获取token
string token = this.gettoken();
HttpWebRequest Request = HttpWebRequest.Create(url) as HttpWebRequest;
Request.Method = "POST";
Request.ContentType = "application/json";
Request.Headers.Add("Cookie", token);
Request.ContentLength = arrB.Length;
//实例化写入请求的参数
using (Stream outStream = Request.GetRequestStream())
{
outStream.Write(arrB, 0, arrB.Length);
outStream.Close();
} //接受http响应
HttpWebResponse myResponse = Request.GetResponse() as HttpWebResponse;
//读取http返回的数据流
Stream ReceiveStream = myResponse.GetResponseStream(); string str = string.Empty;
using (StreamReader reader = new StreamReader(ReceiveStream, Encoding.UTF8))
{
str = reader.ReadToEnd();
reader.Close();
}
myResponse.Close(); dynamic res = JsonConvert.DeserializeObject(str);
dynamic result = JsonConvert.DeserializeObject(Convert.ToString(res.result)); if(Convert.ToString(result.code) =="200" && Convert.ToString(result.msg) == "操作成功")
{
data = JsonConvert.DeserializeObject(Convert.ToString(result.data));
}
else
{
throw new Exception("接口失败,错误代码:" + Convert.ToString(result.code) + ",错误信息:" +Convert.ToString(result.msg));
} }
catch (Exception ex)
{
throw ex;
}
return data;
}
其他方式可访问:http://t.zoukankan.com/damugua-p-14368067.html
部分内容参考:https://blog.csdn.net/u010476739/article/details/119782562
Httpt请求的更多相关文章
- django从请求到响应的过程深入讲解
django启动 我们在启动一个django项目的时候,无论你是在命令行执行还是在pycharm直接点击运行,其实都是执行'runserver'的操作,而ruserver是使用django自带的的we ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- 重温Http协议--请求报文和响应报文
http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...
- Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)
背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...
- nodejs之get/post请求的几种方式
最近一段时间在学习前端向服务器发送数据和请求数据,下面总结了一下向服务器发送请求用get和post的几种不同请求方式: 1.用form表单的方法:(1)get方法 前端代码: <form act ...
- ajax异步请求
做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school.c ...
- C# MVC 5 - 生命周期(应用程序生命周期&请求生命周期)
本文是根据网上的文章总结的. 1.介绍 本文讨论ASP.Net MVC框架MVC的请求生命周期. MVC有两个生命周期,一为应用程序生命周期,二为请求生命周期. 2.应用程序生命周期 应用程序生命周期 ...
- nodejs进阶(5)—接收请求参数
1. get请求参数接收 我们简单举一个需要接收参数的例子 如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球.通过前面的进 ...
- 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...
随机推荐
- python torch 解决OSError: [WinError 126] 找不到指定的模块。 Error loading "D:\Anaconda3\lib\site-packages\torch\lib\asmjit.dll" or one of its dependencies.(安装完torch模块后出现找不到指定模块的问题)
昨天安装了一下python的torch模块,然后出现了以下错误: 根据叙述是因为dll文件,后来 经过我的思考...,升级了一下numpy库,就没有问题了. 根据叙述是因为dll文件,后来 经过我的思 ...
- 二进制安装K8S kubctl get node 返回No resources found
问题描述:node节点kubelet服务启动成功后,在集群master节点执行命令具体结果如下截图 原因:kubelet设置的cgroups和docker的不一致导致 修改docker的cgroup, ...
- Android-AccessibilityService
概述 AccessibilityService用于提供辅助功能服务,其在后台运行,并在触发AccessibilityEvents时由系统接收回调.此类事件表示用户界面中的某些状态转换,例如,焦点更改, ...
- PPT模板网址
PPT免费下载网址: https://www.1ppt.com/ PPT模板下载:www.1ppt.com/moban/ 行业PPT模板:www.1ppt.com/han ...
- 利用python中的win32com模块操作Word、Excel文件
word操作 doc文件转换为docx文件 安装win32com模块:pip3 install pypiwin32 import os from win32com.client import Disp ...
- vue-cli打包后运行报路径错误 不知道什么牛马问题 连默认生成的项目不动一行代码直接打包都会出错
不知道什么牛马问题 连默认生成的项目不动一行代码直接打包都会出错 解决方法 新建一个 vue.config.js module.exports = { publicPath: './', config ...
- Python3注释
Python中的注释有单行注释和多行注释: python中单行注释以#开头,例如: #这是一个注释 print("hello,word!") 多行注释用三个单引号'''或者三个双引 ...
- TypeScript - 配置文件 tsconfig.json
tsconfig.json 文件 创建两种方式: 1. 直接在根目录新建tsconfig.config.json (配置文件需要自己配置) 2. 执行tsc --init (会自动创建相关配置) t ...
- 在Unity3D中开发的Toon Shader
SwordMaster Toon Shader 特点 此卡通渲染风格的Shader是顶点片元Shader,由本人手动编写完成 此卡通渲染风格的Shader已经在移动设备真机上进行过测试,可以直接应用到 ...
- 通过ref调取子组件方法
子 async update(res){ //this.$refs.child.animates(); this.userform = res; }, 主 <DetailEdit @detail ...