HttpWebRequest 上传数据到接口get/post

get方法

        /// <summary>
        /// 使用get方法获取接口的数据
        /// </summary>
        /// <param name="url">请求接口地址</param>
        /// <returns></returns>
        public static string Get(string url)
        {
            string result = "";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "Get";
            //可添加头部参数
            //req.Headers.Add()
            try
            {
                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                Stream stream = resp.GetResponseStream();
                //获取内容
                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                {
                    //获取的数据返回值
                    result = reader.ReadToEnd();
                }
            }
            catch (Exception ex)
            {
                result = ex.Message;
            }
            return result;
        }

post方法

        /// <summary>
        /// 使用post方法传递参数至对方接口
        /// </summary>
        /// <param name="serviceAddress">请求接口地址</param>
        /// <param name="strContent">数据内容一般是json数据</param>
        /// <returns></returns>
      public static string Post(string serviceAddress, string strContent)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceAddress);

            request.Method = "POST";
            request.ContentType = "application/json";
            using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream()))
            {
                dataStream.Write(strContent);
                dataStream.Close();
            }
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            string encoding = response.ContentEncoding;
            if (encoding == null || encoding.Length < 1)
            {
                encoding = "UTF-8"; //默认编码  
            }
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
            return reader.ReadToEnd();

        }

multipart/form-data:既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息;

x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的。

所以 x-www-form-urlencoded可以被form-data代替

post方法 带header账号密码 传输格式方式为formdata

     public static string PostForm(string url, string json = null, Dictionary<string, string> headers = null)
        {
            try
            {
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;//创建http请求实例
                request.Method = "post";
                request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
                StringBuilder buffer = new StringBuilder();//使用字典的方式设置入参名与参数
                if (headers != null)
                {
                    foreach (var kvp in headers)
                    {
                        request.Headers.Add(kvp.Key, kvp.Value);
                    }
                }
                //多个参数要用& 符号连接
                buffer.AppendFormat("{0}={1}&", "data", json);
                //多个参数叠加
                //buffer.AppendFormat("{0}={1}&", "startTime", "2022/6/1");
                //buffer.AppendFormat("{0}={1}", "APIVersion", "1.0");
                byte[] data = Encoding.UTF8.GetBytes(buffer.ToString());
                //使用stream建议最好使用using方法 上面post例子 因为using会自动回收
                Stream stream = request.GetRequestStream();
                stream.Write(data, 0, data.Length);
                stream.Close();
                //回复
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
                string result = streamReader.ReadToEnd();
                return result;
            }
            catch (Exception e)
            {
                return e.ToString();
            }
        }

调用

//1 get方法调用
Get(“http://www.xxxx.com”)
//2 post方法调用
string strjson = JsonConvert.SerializeObject(model);
string PostUrl = “http://www.xxxx.com”;
//resultData是post提交后返回的参数
var resultData = Post(PostUrl, strjson);
//3 post带header调用 fromdata的数据格式
Dictionary<string, string> headers = new Dictionary<string, string>()
{
   { "username","sa" } ,
   { "password","123456" }
};
var responseYD = PostForm(PostUrl , strjson, headers);
posted @ 2021-11-03 10:53  原往  阅读(341)  评论(0)    收藏  举报