• WebRequest设置Header应该放最前面


    WebRequest设置Header应该放最前面,如果先设置RequestBody,可能会破坏Header,造成服务器不能正确读取,即使跟踪查看header的数据都存在

    public static byte[] request(string url, string method, ref Dictionary<string, string> header,object data = null, string encoding = "utf-8")
            {
                HttpWebResponse response = null;
                Stream stream = null;
                MemoryStream memoryStream = null;
                try
                {                
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                    request.Method = method.ToUpper();
    
                    if (header != null)
                    {
                        foreach (string key in header.Keys)
                        {
                            request.Headers.Add(key, header[key]);
                        }
                    }
                    header = null;
    
                    if (data != null)
                    {
                        byte[] bytesRequestData = null;
                        if (data is Dictionary<string, object>)
                        {
                            if (request.ContentType == null)
                                request.ContentType = "application/x-www-form-urlencoded";
                            bytesRequestData = Encoding.Default.GetBytes(createQueryStringUrlEncode((Dictionary<string, object>)data, Encoding.GetEncoding(encoding)));
                        }
                        else if (data is string)
                        {
                            bytesRequestData = Encoding.Default.GetBytes(data as string);
                        }
                        else
                        {
                            BinaryFormatter bf = new BinaryFormatter();
                            memoryStream = new MemoryStream();
                            bf.Serialize(memoryStream, data);
                            bytesRequestData = memoryStream.GetBuffer();
                            memoryStream.Close();
                            memoryStream.Dispose();
                            memoryStream = null;
                        }
                        request.ContentLength = bytesRequestData.Length;
                        Stream requestStream = request.GetRequestStream();
                        requestStream.Write(bytesRequestData, 0, bytesRequestData.Length);
                        requestStream.Close();
                    }
    
                    response = (HttpWebResponse)request.GetResponse();
                    stream = response.GetResponseStream();
                    header = new Dictionary<string, string>();
                    foreach (string key in response.Headers.Keys)
                    {
                        header.Add(key, response.Headers[key]);
                    }
    
                    header["StatusCode"] = response.StatusCode.ToString();
                    header["StatusDescription"] = response.StatusDescription;
    
                    if(stream.CanRead)
                    {
                        byte[] buffer = new byte[1024];
                        int len = 0;
                        memoryStream = new MemoryStream();
                        while ((len = stream.Read(buffer, 0, 1024)) > 0)
                        {
                            memoryStream.Write(buffer, 0, len);
                        }
                        return memoryStream.GetBuffer();
                    }
                    return null;
                }catch(WebException ex){
                    response = (HttpWebResponse)ex.Response;
                    header = new Dictionary<string, string>();
                    foreach (string key in response.Headers.Keys)
                    {
                        header.Add(key, response.Headers[key]);
                    }
                    header["StatusCode"] = response.StatusCode.ToString();
                    header["StatusDescription"] = response.StatusDescription;
                    return null;
                }
                catch (Exception ex)
                {
                    return null;
                }
                finally
                {
                    if (memoryStream != null)
                    {
                        memoryStream.Close();
                        memoryStream.Dispose();
                    }
                    if (stream != null)
                    {
                        stream.Close();
                        stream.Dispose();
                    }
                    if (response != null)
                    {
                        response.Close();
                        response.Dispose();
                    }
                }
            }
  • 相关阅读:
    Arthas(阿尔萨斯)学习记录
    Apache Flume 学习记录
    XA 协议 学习记录
    Federation(联邦) 架构
    服务注册与发现 Consul Consultemplate
    稳态&敏态
    分布式事务 方案对比
    TongWeb
    tensorflow学习011——Dropout抑制过拟合
    tensorflow学习014——tf.data运用实例
  • 原文地址:https://www.cnblogs.com/freewing/p/5133623.html
Copyright © 2020-2023  润新知