首页 > 代码库 > 一个简单的Httpserver以及获取post提交的参数
一个简单的Httpserver以及获取post提交的参数
以下代码是我从网上找来的,但是一直获取不到post提交的参数,最后经过我的修改,终于可以得到post提交的数据。因为本人在网上找了很久都没有找到相关的资料,特意发出来希望能帮到大家,有什么不足的地方还请大神们指正,小弟不胜感激。
Httpserver代码
1 public void StartListen() 2 { 3 using (HttpListener listerner = new HttpListener()) 4 { 5 listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证 Anonymous匿名访问 6 listerner.Prefixes.Add("http://localhost:8080/web/"); 7 8 // listerner.Prefixes.Add("http://localhost/web/"); 9 listerner.Start();10 Console.WriteLine("WebServer Start Successed.......");11 while (true)12 {13 //等待请求连接14 //没有请求则GetContext处于阻塞状态15 HttpListenerContext ctx = listerner.GetContext();16 ctx.Response.StatusCode = 200;//设置返回给客服端http状态代码17 //RequestType=1&Longitude=0.0&Latitude=0.0&RequestSource=xx18 string RequestType = "";19 string Longitude = "";20 string Latitude = "";21 string RequestSource = "";22 //获取客户端写入的信息23 string strRequest = ShowRequestData(ctx.Request);24 if (!string.IsNullOrEmpty(strRequest))25 {26 string[] strR = strRequest.Split(‘&‘);27 string[] strP = new string[strR.Length];28 for (int i = 0; i < strR.Length; i++)29 {30 strP[i] = strR[i].Split(‘=‘)[1];31 }32 RequestType = strP[0];33 Longitude = strP[1];34 Latitude = strP[2];35 RequestSource = strP[3];36 }37 string strSend = "";38 39 if (!string.IsNullOrEmpty(RequestType))40 {41 if (RequestType == "1" && !string.IsNullOrEmpty(Longitude) && !string.IsNullOrEmpty(Latitude))42 {43 strSend = GetPointWeather(Longitude, Latitude, RequestSource);44 }45 if (RequestType == "2")46 { 47 48 }49 }50 51 //使用Writer输出http响应代码52 using (StreamWriter writer = new StreamWriter(ctx.Response.OutputStream, Encoding.GetEncoding("gb2312")))53 {54 writer.WriteLine(strSend);55 writer.Close();56 ctx.Response.Close();57 }58 59 }60 //listerner.Stop();61 }62 }
GetPointWeather函数是我自己定义的,主要是得到返回给客户端的信息。
获取客户端的输入流
1 public string ShowRequestData(HttpListenerRequest request) 2 { 3 if (!request.HasEntityBody) 4 { 5 Console.WriteLine("No client data was sent with the request."); 6 return ""; 7 } 8 System.IO.Stream body = request.InputStream; 9 System.Text.Encoding encoding = request.ContentEncoding;10 System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding);11 if (request.ContentType != null)12 {13 Console.WriteLine("Client data content type {0}", request.ContentType);14 }15 Console.WriteLine("Client data content length {0}", request.ContentLength64);16 17 Console.WriteLine("Start of client data:");18 // Convert the data to a string and display it on the console.19 string s = reader.ReadToEnd();20 Console.WriteLine(s);21 Console.WriteLine("End of client data:");22 body.Close();23 reader.Close();24 // If you are finished with the request, it should be closed also.25 return s;26 }
post请求代码:
1 /// <summary> 2 /// 使用Http请求天气信息 3 /// </summary> 4 /// <param name="RequestType">请求类别(1:点预报 2:镇预报)</param> 5 /// <param name="Longitude">经度(如果是镇预报请求 值为空)</param> 6 /// <param name="Latitude">纬度(如果是镇预报请求 值为空)</param> 7 /// <param name="RequestSource">请求来源</param> 8 public void GetWeatherByHttp(string RequestType, string Longitude, string Latitude, string RequestSource) 9 {10 string strURL = "http://localhost:8080/web/";11 System.Net.HttpWebRequest request;12 request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);13 //Post请求方式 14 request.Method = "POST";15 //内容类型 16 request.ContentType = "application/x-www-form-urlencoded";17 //参数经过URL编码 18 Encoding myEncoding = Encoding.GetEncoding("gb2312");//GetEncoding("gb2312")19 string paraUrlCoded = HttpUtility.UrlEncode("RequestType", myEncoding);20 paraUrlCoded += "=" + HttpUtility.UrlEncode(RequestType, myEncoding);21 paraUrlCoded += "&" + HttpUtility.UrlEncode("Longitude", myEncoding);22 paraUrlCoded += "=" + HttpUtility.UrlEncode(Longitude, myEncoding);23 paraUrlCoded += "&" + HttpUtility.UrlEncode("Latitude", myEncoding);24 paraUrlCoded += "=" + HttpUtility.UrlEncode(Latitude, myEncoding);25 paraUrlCoded += "&" + HttpUtility.UrlEncode("RequestSource", myEncoding);26 paraUrlCoded += "=" + HttpUtility.UrlEncode(RequestSource, myEncoding);27 byte[] payload;28 //将URL编码后的字符串转化为字节 29 payload = System.Text.Encoding.ASCII.GetBytes(paraUrlCoded);30 //设置请求的ContentLength 31 request.ContentLength = payload.Length;32 //获得请求流 33 Stream writer = request.GetRequestStream();34 //将请求参数写入流 35 writer.Write(payload, 0, payload.Length);36 //关闭请求流 37 writer.Close();38 System.Net.HttpWebResponse response;39 //获得响应流 40 response = (System.Net.HttpWebResponse)request.GetResponse();41 System.IO.Stream s;42 s = response.GetResponseStream();43 string StrDate = "";44 string strValue = http://www.mamicode.com/"";45 StreamReader Reader = new StreamReader(s, Encoding.Default);46 while ((StrDate = Reader.ReadLine()) != null)47 {48 strValue += StrDate + "\r\n";49 }50 // txtInfo.Text = strValue; 51 Reader.Close();52 }
一个简单的Httpserver以及获取post提交的参数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。