http post

Posted leolzi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http post相关的知识,希望对你有一定的参考价值。

1.封装post方法发送

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization.Json;
using System.Security.Cryptography;
using System.Text;
using System.Web;

public class WebPostManager
{
    /// <summary>
    /// 发送请求到web服务器,并接受消息,T 是接受的class结构,T2是发送的class结构
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <typeparam name="T2"></typeparam>
    /// <param name="obj"></param>
    /// <param name="url"></param>
    /// <returns></returns>
    public static T CallWebServerPost<T, T2>(T2 obj,string url)
    {
        string poststr = JsonSerializer(obj);
        string backmsg = FinalCallWebServerPost(poststr, url);
        T js = Deserialize<T>(backmsg);
        return js;
    }

    public static string FinalCallWebServerPost(string postDataStr,string url)
    {
        Uri myuri = new Uri(url);
        var request = WebRequest.Create(myuri) as HttpWebRequest;

        request.Method = "POST";
        request.ContentType = "application/json";
        Stream myRequestStream = request.GetRequestStream();
        StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.UTF8);
        myStreamWriter.Write(postDataStr);
        myStreamWriter.Close();
        var Response = request.GetResponse() as HttpWebResponse;
        Stream myResponseStream = Response.GetResponseStream();
        StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
        string retString = myStreamReader.ReadToEnd();
        myStreamReader.Close();
        myResponseStream.Close();
        return retString;
    }

    public static T Deserialize<T>(string json)
    {
        T obj = Activator.CreateInstance<T>();
        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
        {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
            return (T)serializer.ReadObject(ms);
        }
    }

    public static string JsonSerializer<T>(T t)
    {
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
        MemoryStream ms = new MemoryStream();
        ser.WriteObject(ms, t);
        string jsonString = Encoding.UTF8.GetString(ms.ToArray());
        ms.Close();
        return jsonString;
    }
}

 2.调用例子

        public static WebResponseBase ResetNoticeCommad(string Info)
        {
            WebRequestBase dic = new WebRequestBase();
            dic.Type = (int)CommandType.ResetNotice;
            dic.Name = Info; 
            dic.Sign = MD5Check.Sign(dic.PreSign, Info);
            return WebPostManager.CallWebServerPost<WebResponseBase, WebRequestBase>(dic, Url);
        }

 

以上是关于http post的主要内容,如果未能解决你的问题,请参考以下文章

简单的 Javascript http 请求片段但不起作用

discuz X3.1 源代码阅读,记录代码片段

求教golang中http发送post请求gb2312编码的解决方案

推进学说代码片段

HTTP客户端代码片段

测试片段post 2