zoukankan      html  css  js  c++  java
  • C#通过WebClient/HttpWebRequest实现http的post/get方法

    HttpWebRequest 

    //body是要传递的参数,格式"roleId=1&uid=2"
    //post的cotentType填写:
    //"application/x-www-form-urlencoded"
    //soap填写:"text/xml; charset=utf-8"
    public static string PostHttp(string url, string body, string contentType)
    {
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);

    httpWebRequest.ContentType = contentType;
    httpWebRequest.Method = "POST";
    httpWebRequest.Timeout = 20000;

    byte[] btBodys = Encoding.UTF8.GetBytes(body);
    httpWebRequest.ContentLength = btBodys.Length;
    httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);

    HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
    string responseContent = streamReader.ReadToEnd();

    httpWebResponse.Close();
    streamReader.Close();
    httpWebRequest.Abort();
    httpWebResponse.Close();

    return responseContent;
    }

    POST方法(httpWebRequest)

    /// <summary>
    /// 通过WebClient类Post数据到远程地址,需要Basic认证;
    /// 调用端自己处理异常
    /// </summary>
    /// <param name="uri"></param>
    /// <param name="paramStr">name=张三&age=20</param>
    /// <param name="encoding">请先确认目标网页的编码方式</param>
    /// <param name="username"></param>
    /// <param name="password"></param>
    /// <returns></returns>
    public static string Request_WebClient(string uri, string paramStr, Encoding encoding, string username, string password)
    {
    if (encoding == null)
    encoding = Encoding.UTF8;

    string result = string.Empty;

    WebClient wc = new WebClient();

    // 采取POST方式必须加的Header
    wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

    byte[] postData = encoding.GetBytes(paramStr);

    if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
    {
    wc.Credentials = GetCredentialCache(uri, username, password);
    wc.Headers.Add("Authorization", GetAuthorization(username, password));
    }

    byte[] responseData = wc.UploadData(uri, "POST", postData); // 得到返回字符流
    return encoding.GetString(responseData);// 解码
    }

    POST方法(WebClient)

    public static string GetHttp(string url, HttpContext httpContext)
    {
    string queryString = "?";

    foreach (string key in httpContext.Request.QueryString.AllKeys)
    {
    queryString += key + "=" + httpContext.Request.QueryString[key] + "&";
    }

    queryString = queryString.Substring(0, queryString.Length - 1);

    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url + queryString);

    httpWebRequest.ContentType = "application/json";
    httpWebRequest.Method = "GET";
    httpWebRequest.Timeout = 20000;

    //byte[] btBodys = Encoding.UTF8.GetBytes(body);
    //httpWebRequest.ContentLength = btBodys.Length;
    //httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);

    HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
    string responseContent = streamReader.ReadToEnd();

    httpWebResponse.Close();
    streamReader.Close();

    return responseContent;
    }

    Get方法(HttpWebRequest)

    /// <summary>
    /// 通过 WebRequest/WebResponse 类访问远程地址并返回结果,需要Basic认证;
    /// 调用端自己处理异常
    /// </summary>
    /// <param name="uri"></param>
    /// <param name="timeout">访问超时时间,单位毫秒;如果不设置超时时间,传入0</param>
    /// <param name="encoding">如果不知道具体的编码,传入null</param>
    /// <param name="username"></param>
    /// <param name="password"></param>
    /// <returns></returns>
    public static string Request_WebRequest(string uri, int timeout, Encoding encoding, string username, string password)
    {
    string result = string.Empty;

    WebRequest request = WebRequest.Create(new Uri(uri));

    if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
    {
    request.Credentials = GetCredentialCache(uri, username, password);
    request.Headers.Add("Authorization", GetAuthorization(username, password));
    }

    if (timeout > 0)
    request.Timeout = timeout;

    WebResponse response = request.GetResponse();
    Stream stream = response.GetResponseStream();
    StreamReader sr = encoding == null ? new StreamReader(stream) : new StreamReader(stream, encoding);

    result = sr.ReadToEnd();

    sr.Close();
    stream.Close();

    return result;
    }

    #region # 生成 Http Basic 访问凭证 #

    private static CredentialCache GetCredentialCache(string uri, string username, string password)
    {
    string authorization = string.Format("{0}:{1}", username, password);

    CredentialCache credCache = new CredentialCache();
    credCache.Add(new Uri(uri), "Basic", new NetworkCredential(username, password));

    return credCache;
    }

    private static string GetAuthorization(string username, string password)
    {
    string authorization = string.Format("{0}:{1}", username, password);

    return "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(authorization));
    }

    #endregion

    basic验证的WebRequest/WebResponse

  • 相关阅读:
    Mobox企业网盘回收站文件清空与恢复的管控
    NAS设备部署后采用Mobox企业云盘来提升管理功能
    企业网盘支持对象存储帮助用户推行私有云
    阿里云登录界面无法输入账号及密码的解决方法
    团队协作管理-任务追踪管理
    windows10 家庭版 无法远程2012的解决
    bat删除多少天前的文件包含子目录
    企业网盘居然支持高速局域网文件传输工具(速度可达20M)
    防范永恒之蓝勒索病毒-XP、Win10文件共享怎样设置
    【OpenGL】学习笔记#2
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/5819806.html
Copyright © 2011-2022 走看看