C#request 请求响应
/// <summary>
/// 提交POST请求
/// </summary>
/// <param name="url">提交地址</param>
/// <param name="postData">提交的数据</param>
/// <param name="sendEncode">发送时使用的编码格式</param>
/// <param name="receiveEncode">接收时使用的编码格式</param>
/// <param name="timeout">超时时间</param>
/// <param name="signFlag">是否签名</param>
/// <param name="caLogin">是否为登录,如果是登录通过post提交数据需要的+进行替换</param>
/// <returns></returns>
private static CResponseResult HttpPostResult(String url, String postData, Encoding sendEncode, Encoding receiveEncode, int timeout = , bool signFlag = false,bool caLogin=false)
{
using (new CWaitCursor())
{ //连接网站是否出错
bool isConnErr = false;
//返回结果
CResponseResult result = new CResponseResult();
//创建Http请求
HttpWebRequest request;
try
{
byte[] postBytes = null; if (caLogin)
{
postBytes = sendEncode.GetBytes(postData.Replace("+", "%2B"));
}
else
{
postBytes = sendEncode.GetBytes(postData);
} //设置用于验证服务器证书的回调
ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;
//创建Http请求
//如果是发送HTTPS请求
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
}
else
request = (HttpWebRequest)WebRequest.Create(new Uri(url));
//超时
if (timeout > )
{
//此处是毫秒为单位,不能随便转成以秒单位
request.Timeout = timeout;
if (request.ReadWriteTimeout < request.Timeout)
request.ReadWriteTimeout = request.Timeout;
}
request.CookieContainer = GetCookie(url);
request.Headers.Set("Cache-Control", "no-cache");
request.Headers.Set("Pragma", "no-cache");
request.Headers.Set("FRAME_SSO_TICKET", LscSSOTicket.Replace("\r","").Replace("\n","")); request.Method = "POST"; if (signFlag)
{
if (Encoding.Default.GetBytes(postData).Length > limitSize * )
{
string compressDataString = BZipUtil.compressTobase64(BZipUtil.compress(postData));
postBytes = sendEncode.GetBytes(compressDataString);
request.ContentType = "application/zip-compress-ca-encrypted-data";
}
else
{
request.ContentType = "application/ca-encrypted-data";
}
}
else
{
if (Encoding.Default.GetBytes(postData).Length > limitSize * )
{
string compressDataString = BZipUtil.compressTobase64(BZipUtil.compress(postData));
postBytes = sendEncode.GetBytes(compressDataString);
request.ContentType = "application/zip-compress-data";
}
else
{
request.ContentType = "application/x-www-form-urlencoded";
}
} request.ContentLength = postBytes.Length;
//发起Http请求 //设置代理
ProxySetting(request); //用于发送数据的 Stream 对象
Stream requestStream = request.GetRequestStream();
requestStream.Write(postBytes, , postBytes.Length);
requestStream.Close(); //if (currBaseCookie == null)
//{
// currBaseCookie = new CookieContainer();
//request.CookieContainer = GetCookie(url);
//}
}
catch (Exception ex)
{
isConnErr = true;
result.Code = "";
result.Message = ex.Message;
//出现异常,统一抛出HttpPostException
throw new HttpPostException(ex);
} //Http响应
if (!isConnErr)
{
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Encoding jspEncode = GetJspEncode(response.GetResponseHeader("Content-Type"));
string contentType = response.ContentType;
StreamReader reader = new StreamReader(response.GetResponseStream(), jspEncode == null ? receiveEncode : jspEncode);
if (contentType.Contains("application/zip-compress-data;"))
{
//返回内容
result.Message = BZipUtil.decompress(BZipUtil.base64Tocompress(reader.ReadToEnd().Trim()));
}
else
{
result.Message = reader.ReadToEnd().Trim();
}
result.Code = "";
//关闭连接
reader.Close();
response.Close();
}
catch (WebException ex)
{
HttpWebResponse res = ex.Response as HttpWebResponse;
if (res != null)
{
if (res.StatusCode == HttpStatusCode.Forbidden)
{
Stream s = res.GetResponseStream();
Encoding jspEncode = GetJspEncode(res.GetResponseHeader("Content-Type"));
string contentType = res.ContentType;
StreamReader objReader = new StreamReader(s, receiveEncode);
if (contentType.Contains("application/zip-compress-data;"))
{
//返回内容
result.Message = BZipUtil.decompress(BZipUtil.base64Tocompress(objReader.ReadToEnd().Trim()));
}
else
{
result.Message = objReader.ReadToEnd().Trim();
}
objReader.Close();
objReader.Close(); result.Code = "";
}
else
{
result.Message = ex.Message;
result.Code = ((int)(res.StatusCode)).ToString();
}
return result;
}
throw new HttpPostException(ex);
}
catch (Exception ex)
{
result.Code = "";
result.Message = ex.Message;
throw new HttpPostException(ex);
}
}
return result;
}
}
HttpWebRequest
C#request 请求响应的更多相关文章
- django 获取request请求对象及response响应对象中的各种属性值
django request对象和HttpResponse对象 HttpRequest对象(除非特殊说明,所有属性都是只读,session属性是个例外) HttpRequest.scheme 请求方案 ...
- JSP内置对象——request 及其响应get和post请求的实例
request对象客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的实例.request对象具有请求域,即完成客户端的 ...
- jsp当做第二个servlet request的生命周期 请求 响应 不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束 request的域消失
jsp当做第二个servlet request的生命周期 请求 响应 不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束 request的域消失
- Django视图函数之request请求与response响应对象
官方文档: https://docs.djangoproject.com/en/1.11/ref/request-response/ 视图中的request请求对象: 当请求页面时,Django创建一 ...
- request和response——请求响应对象
请求对象--request 获取get请求的值 一次请求,返回一个响应. 地址栏:http://127.0.0.1:8000/day3/get_request?lan=python 问号:代表请求参数 ...
- HTTP协议请求响应过程和HTTPS工作原理
HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏览器)的传送通信协议.与之类似的还有文件传送协议(file transfer p ...
- 基于asp.net MVC 的服务器和客户端的交互(三)之客户端请求响应
一.分析 WEB API 中HTTP 请求方式的四个主要方法 (GET, PUT, POST, DELETE), 按照下列方式映射为 CURD 操作: GET 用于获取 URI 资源的进行展示,GET ...
- Charles_N:HTTP请求响应监听工具
Charles:HTTP请求响应监听工具使用说明.doc 1. 介绍 Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器.它允许一个开发者查看所有连接互联网的HTTP通信 ...
- Servlet的学习之Request请求对象(3)
本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...
随机推荐
- 几个常用的ps命令
1. ps aux If you are looking for a short summary of the active processes, use ps aux [root@rhel7 tm ...
- jdbc01
1.创建对应的数据库以及表 /* SQLyog 企业版 - MySQL GUI v8.14 MySQL - 5.5.32-log : Database - news ***************** ...
- Ajax调用webService(一) 不跨域。
注:需要的js文件与组件(jquery-1.4.2.min.js和Newtonsoft.Json) 同域:要调用的webservice与ajax请求页面在同一个网站下(本文中都是本地测试). 数据库( ...
- MySQL MyISAM/InnoDB高并发优化经验
最近做的一个应用,功能要求非常简单,就是 key/value 形式的存储,简单的 INSERT/SELECT,没有任何复杂查询,唯一的问题是量非常大,如果目前投入使用,初期的单表 insert 频率约 ...
- mssql定时执行作业。
---2000 企业管理器 --管理 --SQL Server代理 --右键作业 --新建作业 --"常规"项中输入作业名称 --"步骤"项 --新建 --&q ...
- Maven 打包可运行 jar
为配合自动化部署hudson,最近研究了如何将eclipse maven工程打包成可运行的jar函数及对应的资源文件. 由于我们工程中包含了多个可运行的任务,在打包成jar时需要分别导出,p ...
- swift 闭包 由浅入深 优化
//: Playground - noun: a place where people can play import UIKit ////////////////////////////////// ...
- VC Windows系统服务创建代码
Windows系统服务创建步骤,常用类封装,废话不多说,直接上代码 // ServceDemo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" ...
- nuc950支持nand的mtd驱动的kernel修改
支持nand的mtd驱动的kernel修改 一.更新nanddriver文件 将新的nanddriver文件nuc900_nand.c放到kernel的drivers/mtd/nand目录下 二.修改 ...
- Redis同步(主从复制)
目录1.Replication的工作原理2.如何配置Redis主从复制3.应用示例 1.Replication的工作原理在Slave启动并连接到Master之后,它将主动发送一条SYNC命令.此后Ma ...