代码之家  ›  专栏  ›  技术社区  ›  User

规范的HTTP POST代码?

  •  15
  • User  · 技术社区  · 15 年前

    我已经看到了很多发送http post的实现,我承认我不完全理解底层细节,不知道需要什么。

    我想要一个通用的方法,比如

    public string SendPost(string url, string data)
    

    可以添加到库中并始终用于发布数据,并将返回服务器响应。

    3 回复  |  直到 11 年前
        1
  •  10
  •   Patrick Klug    13 年前

    我相信简单的说法是

    var client = new WebClient();
    return client.UploadString(url, data);
    

    System.Net.WebClient 类具有其他有用的方法,可用于下载或上载字符串、文件或字节。

    不幸的是,在某些情况下,你不得不做更多的工作。例如,上面的示例不考虑需要针对代理服务器进行身份验证的情况(尽管它将使用IE的默认代理配置)。

    此外,WebClient不支持上载多个文件或设置(某些特定的)标题,有时您需要更深入地使用

    System.Web.HttpWebRequest System.Net.HttpWebResponse 相反

        2
  •  3
  •   Thomas Levesque    15 年前

    WebClient.UploadString (或 UploadData

    然而,内置的 WebClient 有一个主要缺点:您几乎无法控制 WebRequest 网络客户端 GetWebRequest 方法。然后,您可以在发送请求之前对其进行自定义(您可以通过覆盖 GetWebResponse ). 这是 an example 对cookie的感知 . 它是如此简单,让我想知道为什么内置的WebClient不能处理它的开箱即用。。。

        3
  •  0
  •   User    15 年前

    比较:

    // create a client object
    using(System.Net.WebClient client = new System.Net.WebClient()) {
        // performs an HTTP POST
        client.UploadString(url, xml);  
    
    }
    

    string HttpPost (string uri, string parameters)
    { 
       // parameters: name1=value1&name2=value2 
       WebRequest webRequest = WebRequest.Create (uri);
       webRequest.ContentType = "application/x-www-form-urlencoded";
       webRequest.Method = "POST";
       byte[] bytes = Encoding.ASCII.GetBytes (parameters);
       Stream os = null;
       try
       { // send the Post
          webRequest.ContentLength = bytes.Length;   //Count bytes to send
          os = webRequest.GetRequestStream();
          os.Write (bytes, 0, bytes.Length);         //Send it
       }
       catch (WebException ex)
       {
          MessageBox.Show ( ex.Message, "HttpPost: Request error", 
             MessageBoxButtons.OK, MessageBoxIcon.Error );
       }
       finally
       {
          if (os != null)
          {
             os.Close();
          }
       }
    
       try
       { // get the response
          WebResponse webResponse = webRequest.GetResponse();
          if (webResponse == null) 
             { return null; }
          StreamReader sr = new StreamReader (webResponse.GetResponseStream());
          return sr.ReadToEnd ().Trim ();
       }
       catch (WebException ex)
       {
          MessageBox.Show ( ex.Message, "HttpPost: Response error", 
             MessageBoxButtons.OK, MessageBoxIcon.Error );
       }
       return null;
    } // end HttpPost