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 = 0, 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 > 0)
                    {
                        //此处是毫秒为单位,不能随便转成以秒单位
                        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 * 1024)
                        {
                            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 * 1024)
                        {
                            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, 0, postBytes.Length);
                    requestStream.Close();

                    //if (currBaseCookie == null)
                    //{
                    //    currBaseCookie = new CookieContainer();
                    //request.CookieContainer = GetCookie(url);
                    //}
                }
                catch (Exception ex)
                {
                    isConnErr = true;
                    result.Code = "1";
                    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 = "0";
                        //关闭连接
                        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 = "403";
                            }
                            else
                            {
                                result.Message = ex.Message;
                                result.Code = ((int)(res.StatusCode)).ToString();
                            }
                            return result;
                        }
                        throw new HttpPostException(ex);
                    }
                    catch (Exception ex)
                    {
                        result.Code = "2";
                        result.Message = ex.Message;
                        throw new HttpPostException(ex);
                    }
                }
                return result;
            }
        }
HttpWebRequest

 

转载于:https://www.cnblogs.com/weiweiboqi/p/5663764.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
创建EDI请求响应需要遵循EDI标准,具体实现步骤如下: 1. 创建EDI请求报文和EDI响应报文的数据结构,包括报文头和报文体。可以使用XML或者JSON格式。 2. 使用C#中的XML或JSON解析库,读取EDI请求报文中的数据,并根据业务逻辑生成EDI响应报文。例如,可以使用System.Json或Newtonsoft.Json库来处理JSON格式数据。 3. 根据EDI标准的规则进行报文格式的校验,确保生成的EDI响应报文符合标准规范。 4. 将生成的EDI响应报文写入到响应流中,返回给客户端。 以下是一个简单的示例代码,用于创建并返回EDI响应报文: ```csharp using System; using System.IO; using System.Xml.Serialization; using System.Text; namespace EDIRequestResponse { class Program { static void Main(string[] args) { // 读取EDI请求报文 string request = File.ReadAllText("request.xml"); // 解析请求报文 var requestDoc = new XmlDocument(); requestDoc.LoadXml(request); // TODO: 根据业务逻辑生成响应报文 string response = GenerateResponse(requestDoc); // 将响应报文写入响应流中 var responseBytes = Encoding.UTF8.GetBytes(response); var responseStream = new MemoryStream(responseBytes); // TODO: 设置响应报文的Content-Type等响应头信息 var context = HttpContext.Current; context.Response.ContentType = "application/xml"; context.Response.ContentLength = responseStream.Length; responseStream.WriteTo(context.Response.OutputStream); } static string GenerateResponse(XmlDocument requestDoc) { // TODO: 根据请求报文生成响应报文 return "<edi><header/><body/></edi>"; } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值