在給一些客戶端作服務器端支持時,發現他們提交上來的數據大都不是http請求格式,於是使用Request.Form獲取不到內容,今天用C#作下模擬,並演示下數據接收。
1.發送文本
1).客戶端發送文本
using System;
using System.IO;
using System.Net;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Post("http://localhost/Test", "木子屋", Encoding.UTF8));
Console.ReadKey();
}
/// <summary>
/// 發送文本
/// </summary>
/// <param name="url"></param>
/// <param name="data"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string Post(string url, string data, Encoding encoding)
{
byte[] bytes = encoding.GetBytes(data);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
request.ContentLength = bytes.Length;
using (Stream stream = request.GetRequestStream())
{
stream.Write(bytes, 0, bytes.Length);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader stream = new StreamReader(response.GetResponseStream(), encoding))
{
return stream.ReadToEnd();
}
}
}
}
2).服務器端接收文本
string str = "";
using (StreamReader stream = new StreamReader(Request.InputStream))
{
str = stream.ReadToEnd();
}
說明:只需增長request.ContentType = "application/x-www-form-urlencoded",並將文本格式改成"data=木子屋",服務器端便可用Request.Form["data"]接收。
2.上傳文件
1).客戶端上傳文件
using System;
using System.IO;
using System.Net;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(UploadFile("http://localhost/Test", @"E:\test.jpg"));
Console.ReadKey();
}
/// <summary>
/// 上傳文件
/// </summary>
/// <param name="url"></param>
/// <param name="file"></param>
/// <returns></returns>
public static string UploadFile(string url, string file)
{
//1.HttpWebRequest
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
using (Stream stream = request.GetRequestStream())
{
using (FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[4096];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
stream.Write(buffer, 0, bytesRead);
}
}
}
//2.HttpWebResponse
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
return stream.ReadToEnd();
}
}
}
}
2).服務器端接收文件
using (FileStream file = System.IO.File.Create(Request.MapPath("test.jpg"))) { using (BinaryReader stream = new BinaryReader(Request.InputStream)) { byte[] buffer = new byte[4096]; int bytesRead = 0; while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0) { file.Write(buffer, 0, bytesRead); } } }