也希望各位大神可以指点我一下:
由于最近一直再用HTTP请求URL所以 我自己写了一个简单的HTTP帮助类 不喜勿喷 哈哈
啥也不说直接上代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
namespace TaketheNos
{
public class HttpHelper
{
public static string CallRemote(string url, Dictionary<string, string> paramsList, HttpMethod method)
{
MyWebClient wc = new MyWebClient();
if (url.StartsWith("https")) //判断请求是否是https
{
ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;
}
if (method == HttpMethod.Get) //如果请求方式是GET
{
foreach (var pa in paramsList)
{
wc.QueryString.Add(pa.Key, pa.Value);
}
var byRemoteInfo =wc.DownloadData(url);
string sRemoteInfo = System.Text.Encoding.UTF8.GetString(byRemoteInfo);
return sRemoteInfo;
}
else
{
System.Collections.Specialized.NameValueCollection par = new System.Collections.Specialized.NameValueCollection();
foreach (var pa in paramsList)
{
par.Add(pa.Key, pa.Value);
}
var byRemoteInfo = wc.UploadValues(url, "post", par);
string sRemoteInfo = System.Text.Encoding.UTF8.GetString(byRemoteInfo);
return sRemoteInfo;
}
}
private static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
}
public class MyWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri uri)
{
WebRequest w = base.GetWebRequest(uri);
w.Timeout = 30 * 1000;
return w;
}
}
}
可以看到 我是用URL 加上集合 加上请求方式的一个小的HTTP请求帮助类 然后中间那个是证书这个不用我说大家应该比我了解的清楚,WebClient是从元数据可以直接拿来用的GetWebRequest是接收请求的URL。好了 关于我的HTTP请求的帮助类我就说到这里,后面我给大家说一下调用和一个日志帮助类。
调用例子
Dictionary<string, string> prament = new Dictionary<string, string>();
prament.Add("name", "张三");
prament.Add("age", "14");
prament.Add("sex", "2");
string Next = HttpHelper.CallRemote("http://192.168.0.1:222", prament, HttpMethod.Post);
先创建一个集合 然后把你要传的字段丢进去 就OK了。(注意我写的是string 类型的哟)
下面 我来说说日志帮助类:上代码(嘻嘻)
#region 日志记录
private static void LogPrint(string log)
{
try
{
string path = Environment.CurrentDirectory + @"\Logs"; ///这个会自动读取到你项目文件bug文件下面
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
StreamWriter logSW = new StreamWriter(String.Format(@"{0}\Log_FenZhen{1:yyyyMMdd}.txt", path, DateTime.Now), true);
logSW.WriteLine(String.Format("{0:yyyy-MM-dd HH:mm:ss} {1}\n", DateTime.Now, log));
logSW.Close();
deleteFilesByTime(path);
}
catch
{
}
}
/// <summary>
/// 删除30天后的日志
/// </summary>
/// <param name="path"></param>
public static void deleteFilesByTime(string path)
{
Int64 time = 2592000000;//30天的毫秒数
if (Directory.Exists(path))
{
//获取文件夹下所有的文件
DirectoryInfo dyInfo = new DirectoryInfo(path);
foreach (FileInfo feInfo in dyInfo.GetFiles())
{
//判断文件日期是否小于定义的日期,是则删除
TimeSpan ts = DateTime.Now.Subtract(feInfo.CreationTime);
if (ts.TotalMilliseconds > time)
{
feInfo.Delete();
}
}
}
}
#endregion
这个日志帮助类会自动创建文件 所以不需要你手动去创建日志文件 然后会去判断要删除的文件。这个我也就不多解释了 你运行一下就知道了。
调用例子:
LogPrint("获取显示数据 请求URL:" + JiuZheUrl + "?cardType=" + "" + "&cardNo=" + CareID );
最近又看到了一种写法,然后就附加上来
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace JiaoHao.Method
{
class HttpClass
{
/// <summary>
/// 请求资源
/// </summary>
/// <param name="url">url请求路径</param>
/// <returns>返回所有数据的List</returns>
public static string HRequest(string url)
{
//LogClass.WriteLog("请求:" + url);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Accept = "*/*";
//req.Accept = "*/*";
req.Method = "POST";
req.UserAgent = "Mozilla/5.0";
req.Timeout = 5000;//5秒未响应即为超时
WebResponse resp = req.GetResponse(); //&&无法连接到远程服务器未处理 回收服务器内容
StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.UTF8);
string sReturn = sr.ReadToEnd().Trim();
return sReturn;
}
/// <summary>
/// 传入body 进行拼接
/// </summary>
/// <param name="bodyHtml">body部分</param>
/// <param name="serverIp">图片服务器地址</param>
/// <returns></returns>
public static string webHttpPack(string bodyHtml, string serverIp)
{
string html1 = "<!DOCTYPE html> <html lang='en' xmlns='http://www.w3.org/1999/xhtml'> <head> <meta charset='utf-8' /> <title></title> </head> <body scroll=no style='background-color:#d7dde0;overflow:-Scroll;overflow-y:hidden'>";
string html2 = "</body> </html>";
string html3 = bodyHtml.ToString().Replace('\\', ' ');
return html1 + html3 + html2;
}
public static string HttpPost(string Url, string postDataStr)
{
string url = Url;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
string s = "要提交的数据";
byte[] requestBytes = System.Text.Encoding.ASCII.GetBytes(postDataStr);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = requestBytes.Length;
Stream requestStream = req.GetRequestStream();
requestStream.Write(requestBytes, 0, requestBytes.Length);
requestStream.Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream(), System.Text.Encoding.UTF8);
string backstr = sr.ReadToEnd(); sr.Close(); res.Close();
return backstr;
}
}
}
调用 string Url="http://192.168.200.42:97/itf/omsInfo?terminalNum=123321";
string refjson = HttpClass.HRequest(serverUrl);