/// <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 请求响应的更多相关文章

  1. django 获取request请求对象及response响应对象中的各种属性值

    django request对象和HttpResponse对象 HttpRequest对象(除非特殊说明,所有属性都是只读,session属性是个例外) HttpRequest.scheme 请求方案 ...

  2. JSP内置对象——request 及其响应get和post请求的实例

    request对象客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的实例.request对象具有请求域,即完成客户端的 ...

  3. jsp当做第二个servlet request的生命周期 请求 响应 不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束 request的域消失

    jsp当做第二个servlet  request的生命周期   请求 响应  不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束  request的域消失

  4. Django视图函数之request请求与response响应对象

    官方文档: https://docs.djangoproject.com/en/1.11/ref/request-response/ 视图中的request请求对象: 当请求页面时,Django创建一 ...

  5. request和response——请求响应对象

    请求对象--request 获取get请求的值 一次请求,返回一个响应. 地址栏:http://127.0.0.1:8000/day3/get_request?lan=python 问号:代表请求参数 ...

  6. HTTP协议请求响应过程和HTTPS工作原理

    HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏览器)的传送通信协议.与之类似的还有文件传送协议(file transfer p ...

  7. 基于asp.net MVC 的服务器和客户端的交互(三)之客户端请求响应

    一.分析 WEB API 中HTTP 请求方式的四个主要方法 (GET, PUT, POST, DELETE), 按照下列方式映射为 CURD 操作: GET 用于获取 URI 资源的进行展示,GET ...

  8. Charles_N:HTTP请求响应监听工具

    Charles:HTTP请求响应监听工具使用说明.doc   1.    介绍 Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器.它允许一个开发者查看所有连接互联网的HTTP通信 ...

  9. Servlet的学习之Request请求对象(3)

    本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...

随机推荐

  1. HDU 5139数据离线处理

    此题可以找到规律f(n) = 1! * 2! *...*n!, 如果直接打表的话,由于n比较大(10000000),所以会超内存,这时候就要用到离线处理数据,就是先把数据存起来,到最后在暴力一遍求解就 ...

  2. 线段树---HDU1754 I hate it

    这个题也是线段树的基础题,有了上一个题的基础,在做这个题就显得比较轻松了,大体都是一样的,那个是求和,这个改成求最大值,基本上思路差不多,下面是代码的实现 #include <cstdio> ...

  3. zookeeper管理solr的配置文件

    zookeeper可以管理solr和其他软件的配置文件.配置文件还是保存在linux服务器的磁盘上,但是不是改变solr读取solr/home配置的配置文件的位置. 现在solr/home配置文件的位 ...

  4. js中如何把字符串转化为对象

    例如   [javascript]  var test='{ colkey: "col", colsinfo: "NameList" }'       var ...

  5. Debugging Failed Because Integrated Windows Authentication Is Not Enabled

    To enable integrated Windows authentication Log onto the Web server using an administrator account. ...

  6. VM下Linux网卡丢失(pcnet32 device eth0 does not seem to be ...)解决方案

    系统启动日志:Bringing up interface eth0: pcnet32 device eth0 does not seepresent, delaying initialization. ...

  7. oracle单行函数之字符函数

    Lower--转换为小写 upper--转换为大写 Initcap--首字母大写 concat--连接字符 substr--截取字符 length/length--获取字符串长度(字节长度) inst ...

  8. Date与Calendar

    Date date=new Date();//现在时间 Date date1=new Date(1000);//格林威治时间1997/01/01开始算,后面的是毫秒 Calendar calendar ...

  9. IIS下图片防盗连设置详解

    小站只有100个IIS,盗链后经常是连主页都打不开,就想着弄个图片防盗链,在网上找了一下资料,正则表达式的写法啊,ISAPI_REWRITE基本配置啊等等,找来啃了一天终于发现有三个方法实现. 第一. ...

  10. Poweroff – 很好很强大的定制关机工具

    Poweroff – 很好很强大的定制关机工具 Poweroff 是一个用来管理电脑关机系统的小工具,支持定时,支持远程 作者开放源代码,有兴趣的同学可以尝试着制作一下汉化版本.   可以设定不同时间 ...