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 ...
随机推荐
- 使用CButtonColumn自定义CGridiew里面的按钮
参考 http://www.yiiwiki.com/post/8 使用yii做的项目,编辑的时候,使用到的是自带的 CButtonColumn , 现在需要在编辑的时候跳新页面,这时只需要这样做就可以 ...
- Filtering Specific Columns with cut
Filtering Specific Columns with cut When working with text files, it can be useful to filter out s ...
- Linux LVM 扩展磁盘分区
系统:centos 6.3--新建分区 fdisk -l /dev/sdc # 查看分区 fdisk /dev/sdc # 创建分区 :n ...
- codevs 2494 Vani和Cl2捉迷藏
/* 一开始大意了 以为和bzoj上的祭祀是一样的(毕竟样例都一样) 这里不知相邻的点可以相互到达 间接相连的也可以到达 所以floyed先建立一下关系 再跑最大独立集 下面贴一下95 和 100的代 ...
- ARGB和RGB
ARGB 一种色彩模式,也就是RGB色彩模式附加上Alpha(透明度)通道,常见于32位位图的存储结构. ARGB---Alpha,Red,Green,Blue. Alpha-图像通道 如果图形卡具有 ...
- C# 连接SQL数据库
感觉很有必要总结一下 一:C# 连接SQL数据库 Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;P ...
- oracle存储过程调试方法
PL/SQL中为我们提供了[调试存储过程]的功能,可以帮助你完成存储过程的预编译与测试. 点击要调试的存储过程,右键选择TEST 如果需要查看变量,当然调试都需要.在右键菜单中选择Add debug ...
- 【转】#include,#import,@class的区别
#include #include <> :用于对系统文件的引用,编译器会在系统文件目录下去查找该文件. #include "xx.h ...
- JavaScript 类、构造函数、原型
类.构造函数.原型 :本质均为函数 利用的原理是:词法作用域,调用对象及作用域链 闭包 属性查找方式 设计和new运算符一起使用的函数叫做构造函数. 构造函数的工作:初始化一个新创建的对象 ...
- 如何在Eclipse中给main方法加参数
在main方法中有一个args参数,那么如何给args参数赋值呢? public class TestMain { public static void main(String[] args) { f ...