/// <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. ckeditor常用设置

    1.首先下载ckeditor放入自己的项目WebRoot目录下 2.在自己的页面中引入需要的js库 3.在界面中书写多行文本域 必须要有name或者id属性  不然没有效果显示 4.修改ckedito ...

  2. (转)DevExpress GridView属性设置

    GirdControl是数据的容器,它包含多种显示方式,GridView则是一种二维表格视图. 绑定数据源: List<Student> list = new List<Studen ...

  3. dsoframer组件详细使用(aspx.net)

    近来由于工作需要,要求实现一个office文档在线编辑器 关于在线操作office 我是一点经验没有 网上查了半天资料 锁定了一款组件(ActiveX控件dsoframer,一个用C++实现的offi ...

  4. PHP语言中使用JSON

    原文地址:http://www.ruanyifeng.com/blog/2011/01/json_in_php.html 在PHP语言中使用JSON 目前,JSON已经成为最流行的数据交换格式之一,各 ...

  5. 用MS自带的VS构建joint语句

    在其中一个表上,右键,选择"New Query",弹出"Add Table"对话框,将待joint的两个表Add,并选择相应字段,则会自动构建joint语句,其 ...

  6. PHP Filesystem

    Runtime 配置 Filesystem 函数的行为受到 php.ini 中设置的影响. Filesystem 配置选项: 名称 默认 描述 可改变 allow_url_fopen "1& ...

  7. Win7下Solr4.10.1和TomCat8的安装

    1.系统为win7 64位系统,安装有wamp的环境,我的所有网站放在 d:\webserver下,域名指向该目录下的子目录: 2.安装TomCat8到 D:\Tomcat 8.0: 3.在 d:\w ...

  8. extjs中grid中行内文本或图片居中显示

    我是看了网上写的方法调试自己的代码来实现的,实现的方式是当加载store数据时改变grid的行样式,源码如下: html代码: <div id="weatherP_grid-body& ...

  9. PHP几个防SQL注入攻击自带函数区别

    SQL注入攻击是黑客攻击网站最常用的手段.如果你的站点没有使用严格的用户输入检验,那么常容易遭到SQL注入攻击.SQL注入攻击通常通过给站点数据库提交不良的数据或查询语句来实现,很可能使数据库中的纪录 ...

  10. delphi : 取得网页源码内容

    取得网页的源码内容的函数以及调用方法供大家参考: program geturl; uses wininet, windows; //取网页内容 function StrPas(const Str: P ...