123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
- using System.Net;
- namespace DotNet.Utilities
- {
- #region 调用试例
- // static void Main(string[] args)
- // {
- // string url = "www.baidu.com";
- // string param = "<request><param1></param1></request>";
- // string method="GET";
-
- // for (int i = 0; i < 1; i++)//发送多条请求看看会不会有问题。
- // {
- // var result = HttpUtility.Request(method, url, param, onComplete);
- // Console.WriteLine("-------------Result----------------");
- // Console.WriteLine(result);
- // Console.WriteLine("-------------End----------------");
-
- // }
-
- // Console.ReadLine();
- // }
-
- // /// <summary>
- // /// 请求完成后要执行的操作
- // /// </summary>
- // /// <param name="code">Http状态码</param>
- // /// <param name="result">返回结果</param>
- // public static void onComplete(HttpStatusCode code, string result)
- // {
- // Console.WriteLine("HttpRequest complete! as follow:");
- // Console.WriteLine("HttpStatusCode:" + code);
- // Console.WriteLine("HttpRequestResult:" + result);
- // }
- #endregion
- /// <summary>
- /// Http请求
- /// </summary>
- public class HttpUtility
- {
- /// <summary>
- ///通用HttpWebRequest
- /// </summary>
- /// <param name="method">请求方式(POST/GET)</param>
- /// <param name="url">请求地址</param>
- /// <param name="param">请求参数</param>
- /// <param name="onComplete">完成后执行的操作(可选参数,通过此方法可以获取到HTTP状态码)</param>
- /// <returns>请求返回的结果</returns>
- public static string Request(string method, string url, string param, Action<HttpStatusCode, string> onComplete = null)
- {
- if (string.IsNullOrEmpty(url))
- throw new ArgumentNullException("URL");
- switch (method.ToUpper())
- {
- case "POST":
- return Post(url, param, onComplete);
- case "GET":
- return Get(url, param, onComplete);
- default:
- throw new EntryPointNotFoundException("method:" + method);
- }
- }
- /// <summary>
- /// Post请求
- /// </summary>
- /// <param name="url">请求地址</param>
- /// <param name="param">参数</param>
- /// <param name="onComplete">完成后执行的操作(可选参数,通过此方法可以获取到HTTP状态码)</param>
- /// <returns>请求返回的结果</returns>
- public static string Post(string url, string param, Action<HttpStatusCode, string> onComplete = null)
- {
- UrlCheck(ref url);
- byte[] bufferBytes = Encoding.UTF8.GetBytes(param);
- var request = WebRequest.Create(url) as HttpWebRequest;//HttpWebRequest方法继承自WebRequest, Create方法在WebRequest中定义,因此此处要显示的转换
- request.Method = "POST";
- request.ContentLength = bufferBytes.Length;
- request.ContentType = "application/x-www-form-urlencoded";
- try
- {
- using (var requestStream = request.GetRequestStream())
- {
- requestStream.Write(bufferBytes, 0, bufferBytes.Length);
- }
- }
- catch (WebException ex)
- {
- return ex.Message;
- }
- return HttpRequest(request, onComplete);
- }
- /// <summary>
- /// GET请求
- /// </summary>
- /// <param name="url">请求地址</param>
- /// <param name="param">参数</param>
- /// <param name="onComplete">完成后执行的操作(可选参数,通过此方法可以获取到HTTP状态码)</param>
- /// <returns>请求返回结果</returns>
- public static string Get(string url, string param, Action<HttpStatusCode, string> onComplete = null)
- {
- UrlCheck(ref url);
- if (!string.IsNullOrEmpty(param))
- if (!param.StartsWith("?"))
- param += "?" + param;
- else
- param += param;
- var request = WebRequest.Create(url) as HttpWebRequest;
- request.Method = "GET";
- request.ContentType = "application/x-www-form-urlencoded";
- return HttpRequest(request, onComplete);
- }
- /// <summary>
- /// 请求的主体部分(由此完成请求并返回请求结果)
- /// </summary>
- /// <param name="request">请求的对象</param>
- /// <param name="onComplete">完成后执行的操作(可选参数,通过此方法可以获取到HTTP状态码)</param>
- /// <returns>请求返回结果</returns>
- private static string HttpRequest(HttpWebRequest request, Action<HttpStatusCode, string> onComplete = null)
- {
- HttpWebResponse response = null;
- try
- {
- response = request.GetResponse() as HttpWebResponse;
- }
- catch (WebException ex)
- {
- response = ex.Response as HttpWebResponse;
- }
- if (response == null)
- {
- if (onComplete != null)
- onComplete(HttpStatusCode.NotFound, "请求远程返回为空");
- return null;
- }
- string result = string.Empty;
- using (StreamReader reader = new StreamReader(response.GetResponseStream()))
- {
- result = reader.ReadToEnd();
- }
- if (onComplete != null)
- onComplete(response.StatusCode, result);
- return result;
- }
- /// <summary>
- /// URL拼写完整性检查
- /// </summary>
- /// <param name="url">待检查的URL</param>
- private static void UrlCheck(ref string url)
- {
- if (!url.StartsWith("http://") && !url.StartsWith("https://"))
- url = "http://" + url;
- }
- }
- }
|