HttpWebRequest(System.Net)模擬HTTP發送POST


相關參考網上很多,但需要理解並轉成自己的情況

 1 public static string HttpWebRequestPost(string url, string param)
 2 {
 3     HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
 4     Encoding encoding = Encoding.UTF8;
 5     byte[] byteArray = Encoding.ASCII.GetBytes(param);
 6     string responseData = String.Empty;
 7     req.Method = "POST";
 8     req.ContentType = "application/x-www-form-urlencoded";
 9     req.ContentLength = byteArray.Length;
10 
11     using (Stream reqStream = req.GetRequestStream())
12     {
13         reqStream.Write(byteArray, 0, byteArray.Length);
15     }
16     using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
17     {
18         using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
19         {
20             responseData = reader.ReadToEnd();
21         }
22         return responseData;
23     }
24 }

1.第1行param:需要發送的POST參數,需要和對應接收端約定好相應的格式,如本實例為 random=abc&check=faa5bff8a65e359ea863ca1e ,查參考代碼時在stackoverflow.com上看到POST要傳送到數據格式是這樣的 string data = "{\"service\":\"absence.list\", \"company_id\":3}"; 

2.第5行是注意點需要將發送到數據轉成byte[],這里有一個坑,需要使用對應Encoding工具,推測也是和接收請求的服務端相對應的,這里使用了Encoding.ASCII.GetBytes(param);參考代碼中大多是使用了UTF8Encoding對象的.GetBytes(data)方法.

相關參考:獲取UTF8Encoding對象兩種coding

UTF8Encoding enc = new UTF8Encoding(); byte[] buf = enc.GetBytes(data);
//方式二
byte[] buf = System.Text.Encoding.GetEncoding("utf-8").GetBytes(RequestPara);

3.第8行需要根據實際情況調整,其它參考值xxx.ContentType = "application/json; charset=UTF-8";

4.11至15行HttpWebRequest發送POST請求的必須套路,即將發送參數寫入輸出流,看到不少大同小異的編程風格

5. 第16行req.GetResponse()核心方法,將請求真正發送出去,然后從響應流中讀取數據

附GET請求

public string HttpWebRequestGet(string url, string param)
{
    param = param.IndexOf('?') > -1 ? (param) : ("?" + param);

    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url + param);
    Encoding encoding = Encoding.UTF8;
    string responseData = String.Empty;
    req.Method = "GET";
    using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
    {
        using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
        {
            responseData = reader.ReadToEnd();
        }
        return responseData;
    }
}

 

end


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM