目錄
1.get請(qǐng)求方式
1.1不需要請(qǐng)求參數(shù)時(shí)
1.2請(qǐng)求參數(shù)可以用表單數(shù)據(jù)(鍵值對(duì))拼接時(shí)
2.POST請(qǐng)求方式
2.1請(qǐng)求參數(shù)為json字符串格式時(shí)
2.2請(qǐng)求參數(shù)為表單數(shù)據(jù)(鍵值對(duì))格式時(shí)
2.3請(qǐng)求參數(shù)為多分部數(shù)據(jù)(復(fù)合式表單)格式時(shí),(以上傳文件接口為例)
本文主要介紹了通過(guò)C#中的WebRequest來(lái)發(fā)送post和get兩種請(qǐng)求方式的過(guò)程。
1.get請(qǐng)求方式
1.1不需要請(qǐng)求參數(shù)時(shí)
url為請(qǐng)求的接口地址
private string GetData(string url)
{
string result = string.Empty;
string error = string.Empty;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 20000; //超時(shí)時(shí)間
request.Method = "GET"; //請(qǐng)求方式
request.KeepAlive = true; //解決GetResponse操作超時(shí)問(wèn)題
request.Headers.Add("Authorization", "token"); //如果接口需要鑒權(quán), 把"token"換成自己需要的
//通過(guò)HttpWebRequest的GetResponse()方法建立HttpWebResponse,強(qiáng)制類型轉(zhuǎn)換
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//獲取響應(yīng)內(nèi)容,返回的數(shù)據(jù)格式: {"status":"success","msg":"成功","data":{"info": "example"}}
string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
//結(jié)果解析,異常情況判斷
JObject json = JObject.Parse(postContent);
var gList = json["data"];
if (json["status"] == null || gList == null || json["msg"] == null)
error = "接口錯(cuò)誤";
else if (json["status"].ToString() != "success")
error = string.Format("接口查詢結(jié)果返回錯(cuò)誤,{0}", json["msg"]);
else if (gList.ToString() != string.Empty)
result = gList["info"].ToString();
else { }
}
catch (Exception ex)
{
error = ex.Message;
}
if (error != string.Empty)
MessageBox.Show(error);
return result;
}
1.2請(qǐng)求參數(shù)可以用表單數(shù)據(jù)(鍵值對(duì))拼接時(shí)
url為請(qǐng)求的接口地址,pairs為請(qǐng)求的參數(shù)(字典格式)
private string GetUrlEncodeData(string url, Dictionary<string, string> pairs)
{
string result = string.Empty;
string error = string.Empty;
try
{
StringBuilder sb = new StringBuilder();
foreach (string key in pairs.Keys)
sb.Append(key).Append("=").Append(pairs[key]).Append("&");
if (pairs.Count > 0)
url = url + "?" + sb.ToString().Trim('&');
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/x-www-form-urlencoded"; //表單數(shù)據(jù)(鍵值對(duì))
request.Timeout = 20000; //超時(shí)時(shí)間
request.Method = "GET"; //請(qǐng)求方式
request.KeepAlive = true; //解決GetResponse操作超時(shí)問(wèn)題
request.Headers.Add("Authorization", "token"); //如果接口需要鑒權(quán), 把"token"換成自己需要的
//通過(guò)HttpWebRequest的GetResponse()方法建立HttpWebResponse,強(qiáng)制類型轉(zhuǎn)換
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//獲取響應(yīng)內(nèi)容,返回的數(shù)據(jù)格式: {"status":"success","msg":"成功","data":{"info": "example"}}
string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
//結(jié)果解析,異常情況判斷
JObject json = JObject.Parse(postContent);
var gList = json["data"];
if (json["status"] == null || gList == null || json["msg"] == null)
error = "接口錯(cuò)誤";
else if (json["status"].ToString() != "success")
error = string.Format("接口查詢結(jié)果返回錯(cuò)誤,{0}", json["msg"]);
else if (gList.ToString() != string.Empty)
result = gList["info"].ToString();
else { }
}
catch (Exception ex)
{
error = ex.Message;
}
if (error != string.Empty)
MessageBox.Show(error);
return result;
}
2.POST請(qǐng)求方式
2.1請(qǐng)求參數(shù)為json字符串格式時(shí)
url為請(qǐng)求的接口地址,pairs為請(qǐng)求的參數(shù)(字典格式)
private string PostJsonData(string url, Dictionary<string, string> pairs)
{
string result = string.Empty;
string error = string.Empty;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 20000; //超時(shí)時(shí)間
request.Method = "POST"; //請(qǐng)求方式
request.KeepAlive = true; //解決GetResponse操作超時(shí)問(wèn)題
request.Headers.Add("Authorization", "token"); //如果接口需要鑒權(quán), 把"token"換成自己需要的
//設(shè)置Content-type HTTP標(biāo)頭的值,即請(qǐng)求的媒體類型
request.ContentType = "application/json"; //json字符串
//request.ContentType = "multipart/form-data"; //多分部數(shù)據(jù)
string content = JsonConvert.SerializeObject(pairs);
byte[] data = Encoding.UTF8.GetBytes(content);
//寫入請(qǐng)求的參數(shù)
using (var stream = request.GetRequestStream())
stream.Write(data, 0, data.Length);
//通過(guò)HttpWebRequest的GetResponse()方法建立HttpWebResponse,強(qiáng)制類型轉(zhuǎn)換
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//獲取響應(yīng)內(nèi)容,返回的postContent是json字符串格式:{"status":"success","msg":"成功","data":{"info": "example"}}
string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
//結(jié)果解析,異常情況判斷
JObject json = JObject.Parse(postContent);
var gList = json["data"];
if (json["status"] == null || gList == null || json["msg"] == null)
error = "接口錯(cuò)誤";
else if (json["status"].ToString() != "success")
error = string.Format("接口查詢結(jié)果返回錯(cuò)誤,{0}", json["msg"]);
else if (gList.ToString() != string.Empty)
result = gList["info"].ToString();
else { }
}
catch (Exception ex)
{
error = ex.Message;
}
if (error != string.Empty)
MessageBox.Show(error);
return result;
}
2.2請(qǐng)求參數(shù)為表單數(shù)據(jù)(鍵值對(duì))格式時(shí)
url為請(qǐng)求的接口地址,pairs為請(qǐng)求的參數(shù)(字典格式)
private string PostUrlEncodeData(string url, Dictionary<string, string> pairs)
{
string result = string.Empty;
string error = string.Empty;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/x-www-form-urlencoded"; //表單數(shù)據(jù)(鍵值對(duì))
request.Timeout = 20000; //超時(shí)時(shí)間
request.Method = "POST"; //請(qǐng)求方式
request.KeepAlive = true; //解決GetResponse操作超時(shí)問(wèn)題
request.Headers.Add("Authorization", "token"); //如果接口需要鑒權(quán), 把"token"換成自己需要的
StringBuilder sb = new StringBuilder();
foreach (string key in pairs.Keys)
sb.Append(key).Append("=").Append(pairs[key]).Append("&");
string content = sb.ToString().Trim('&');
byte[] data = Encoding.UTF8.GetBytes(content);
//寫入請(qǐng)求的參數(shù)
using (var stream = request.GetRequestStream())
stream.Write(data, 0, data.Length);
//通過(guò)HttpWebRequest的GetResponse()方法建立HttpWebResponse,強(qiáng)制類型轉(zhuǎn)換
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//獲取響應(yīng)內(nèi)容,返回的json字符串postContent格式:
//{"status":"success","msg":"成功","data":{"info": "example"}}
string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
//結(jié)果解析,異常情況判斷
JObject json = JObject.Parse(postContent);
var gList = json["data"];
if (json["status"] == null || gList == null || json["msg"] == null)
error = "接口錯(cuò)誤";
else if (json["status"].ToString() != "success")
error = string.Format("接口查詢結(jié)果返回錯(cuò)誤,{0}", json["msg"]);
else if (gList.ToString() != string.Empty)
result = gList["info"].ToString();
else { }
}
catch (Exception ex)
{
error = ex.Message;
}
if (error != string.Empty)
MessageBox.Show(error);
return result;
}
2.3請(qǐng)求參數(shù)為多分部數(shù)據(jù)(復(fù)合式表單)格式時(shí),(以上傳文件接口為例)
url為請(qǐng)求的接口地址,filePath為文件的絕對(duì)路徑。
首先獲取本地文件路徑,文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-400462.html
string uploadURL = "http://127.0.0.1:8888/api/test/";
string uploadFilePath = string.Empty;
OpenFileDialog openFileDialog = new OpenFileDialog
{
Filter = "所有文件|*.*"
};
if (openFileDialog.ShowDialog() == DialogResult.OK)
uploadFilePath = openFileDialog.FileName;
string result = PostMultipartData(uploadURL, uploadFilePath);
上傳文件函數(shù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-400462.html
private string PostMultipartData(string url, string filePath)
{
string result = string.Empty;
string error = string.Empty;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 20000; //超時(shí)時(shí)間
request.Method = "POST"; //請(qǐng)求方式
request.KeepAlive = true; //解決GetResponse操作超時(shí)問(wèn)題
request.ContentType = "multipart/form-data"; //多分部數(shù)據(jù)(復(fù)合式表單)
request.Headers.Add("Authorization", "token"); //如果接口需要鑒權(quán), 把"token"換成自己需要的
//讀取文件內(nèi)容
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
byte[] fileData = new byte[fs.Length];
fs.Read(fileData, 0, fileData.Length);
string fileName = Path.GetFileName(filePath);
//瀏覽器在發(fā)送表單的enctype="multipart/form-data", 需要在往后臺(tái)發(fā)送請(qǐng)求的時(shí)候添加一個(gè)[boundary]屬性
string boundary = "test" + DateTime.Now.Ticks.ToString("x"); // 邊界符, "test"可以改, 其他部分不能改
byte[] boundarybytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n"); // 邊界符開(kāi)始
byte[] endbytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); // 邊界符結(jié)束
//寫入請(qǐng)求的參數(shù)
using (var stream = request.GetRequestStream())
{
//獲取文件頭的字節(jié)序列
string temp = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n";
string header = string.Format(temp, "file", fileName);
byte[] fileHeader = Encoding.UTF8.GetBytes(header);
stream.Write(boundarybytes, 0, boundarybytes.Length); //寫入FormData項(xiàng)的開(kāi)始邊界符
stream.Write(fileHeader, 0, fileHeader.Length); //將文件頭寫入FormData項(xiàng)中
stream.Write(boundarybytes, 0, boundarybytes.Length); //每?jī)纱螌懭胫g要加入開(kāi)始邊界符
stream.Write(fileData, 0, fileData.Length); //將文件流寫入FormData項(xiàng)
stream.Write(endbytes, 0, endbytes.Length); //寫入FormData的結(jié)束邊界符
}
//通過(guò)HttpWebRequest的GetResponse()方法建立HttpWebResponse,強(qiáng)制類型轉(zhuǎn)換
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//獲取響應(yīng)內(nèi)容,返回的json字符串postContent格式:
//{"status":"success","msg":"成功","data":{"info": "example"}}
string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
//結(jié)果解析,異常情況判斷
JObject json = JObject.Parse(postContent);
var gList = json["data"];
if (json["status"] == null || gList == null || json["msg"] == null)
error = "接口錯(cuò)誤";
else if (json["status"].ToString() != "success")
error = string.Format("接口查詢結(jié)果返回錯(cuò)誤,{0}", json["msg"]);
else if (gList.ToString() != string.Empty)
result = gList["info"].ToString();
else { }
}
catch (Exception ex)
{
error = ex.Message;
}
if (error != string.Empty)
MessageBox.Show(error);
return result;
}
到了這里,關(guān)于C# 使用WebRequest發(fā)送post和get請(qǐng)求的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!