C# http请求工具类
/// <summary>
/// Http请求操作类之HttpWebRequest
/// </summary>
public class HttpHelper
{
#region properties private ILog _logger;
private readonly Encoding ENCODING = Encoding.UTF8;
#endregion #region constructor
public HttpHelper()
{
this._logger = LogManager.GetLogger("HttpHelper");
}
#endregion #region public methods /// <summary>
/// Post
/// </summary>
/// <param name="url"></param>
/// <param name="msg"></param>
/// <returns></returns>
public string HTTPJsonPost(string url, string msg)
{
string result = string.Empty;
try
{
this._logger.InfoFormat("HTTPJsonPostUrl:{0}", url);
this._logger.InfoFormat("HTTPJsonPostMsg:{0}", msg);
result = CommonHttpRequest(msg, url, "POST");
//if (!result.Contains("\"Code\":200"))
//{
// throw new Exception(result);
//}
}
catch (WebException ex)
{
if (ex.Response != null)
{
HttpWebResponse response = (HttpWebResponse)ex.Response;
Console.WriteLine("Error code: {0}", response.StatusCode);
switch (response.StatusCode)
{
case HttpStatusCode.BadRequest:
case HttpStatusCode.Forbidden:
case HttpStatusCode.InternalServerError:
{
using (Stream data = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(data))
{
string text = reader.ReadToEnd();
throw new Exception(text);
}
}
}
break;
} }
this._logger.ErrorFormat("HTTPJsonPost异常:{0}", ex.Message);
}
catch (Exception ex)
{
this._logger.ErrorFormat("HTTPJsonPost异常:{0}", ex.Message);
throw new Exception(ex.Message); }
return result;
} /// <summary>
/// Get
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public string HTTPJsonGet(string url)
{
string result = string.Empty;
try
{
this._logger.InfoFormat("HTTPJsonPostUrl:{0}", url);
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.ContentType = "application/json";
request.Method = "GET";
HttpWebResponse resp = request.GetResponse() as HttpWebResponse;
System.IO.StreamReader reader = new System.IO.StreamReader(resp.GetResponseStream(), this.ENCODING);
result = reader.ReadToEnd();
}
catch (Exception ex)
{
this._logger.ErrorFormat("HTTPJsonGet异常:{0}", ex.Message);
}
return result;
} /// <summary>
/// Put
/// </summary>
/// <param name="data"></param>
/// <param name="uri"></param>
/// <returns></returns>
public string HTTPJsonDelete(string url, string data)
{
return CommonHttpRequest(data, url, "DELETE");
} /// <summary>
/// Put
/// </summary>
/// <param name="data"></param>
/// <param name="uri"></param>
/// <returns></returns>
public string HTTPJsonPut(string url, string data)
{
return CommonHttpRequest(data, url, "PUT");
} #endregion #region private public string CommonHttpRequest(string data, string uri, string type)
{ //Web访问对象,构造请求的url地址
string serviceUrl = uri; //构造http请求的对象
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
myRequest.Timeout = 600000;
//转成网络流
byte[] buf = this.ENCODING.GetBytes(data);
//设置
myRequest.Method = type;
myRequest.ContentLength = buf.LongLength;
myRequest.ContentType = "application/json"; //将客户端IP加到头文件中
string sRealIp = GetHostAddress();
if (!string.IsNullOrEmpty(sRealIp))
{
myRequest.Headers.Add("ClientIp", sRealIp);
} using (Stream reqstream = myRequest.GetRequestStream())
{
reqstream.Write(buf, 0, (int)buf.Length);
}
HttpWebResponse resp = myRequest.GetResponse() as HttpWebResponse;
System.IO.StreamReader reader = new System.IO.StreamReader(resp.GetResponseStream(), this.ENCODING);
string ReturnXml = reader.ReadToEnd();
reader.Close();
resp.Close();
return ReturnXml;
}
#endregion /// <summary>
/// 获取客户端IP地址(无视代理)
/// </summary>
/// <returns>若失败则返回回送地址</returns>
public static string GetHostAddress()
{
try
{
string userHostAddress = HttpContext.Current.Request.UserHostAddress; if (string.IsNullOrEmpty(userHostAddress))
{
userHostAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
} //最后判断获取是否成功,并检查IP地址的格式(检查其格式非常重要)
if (!string.IsNullOrEmpty(userHostAddress) && IsIP(userHostAddress))
{
return userHostAddress;
}
return "127.0.0.1";
}
catch
{
return "127.0.0.1";
} } /// <summary>
/// 检查IP地址格式
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public static bool IsIP(string ip)
{
return System.Text.RegularExpressions.Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
} public static long ConvertDataTimeLong(DateTime dt)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
TimeSpan toNow = dt.Subtract(dtStart);
long timeStamp = toNow.Ticks;
timeStamp = long.Parse(timeStamp.ToString().Substring(0, timeStamp.ToString().Length - 4));
return timeStamp;
} public static DateTime ConvertLongDateTime(long d)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = long.Parse(d + "0000");
TimeSpan toNow = new TimeSpan(lTime);
DateTime dtResult = dtStart.Add(toNow);
return dtResult;
} private string ConvertToJsonString<T>(T model)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
var stream = new MemoryStream();
serializer.WriteObject(stream, model); byte[] dataBytes = new byte[stream.Length]; stream.Position = 0; stream.Read(dataBytes, 0, (int)stream.Length); string dataString = Encoding.UTF8.GetString(dataBytes);
return dataString;
}
} /// <summary>
/// Http请求操作类之WebClient
/// </summary> public static class WebClientHelper
{
public static string Post(string url, string jsonData)
{
var client = new WebClient();
client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
client.Encoding = System.Text.Encoding.UTF8;
byte[] data = Encoding.UTF8.GetBytes(jsonData);
byte[] responseData = client.UploadData(new Uri(url), "POST", data);
string response = Encoding.UTF8.GetString(responseData);
return response;
} public static void PostAsync(string url, string jsonData, Action<string> onComplete, Action<Exception> onError)
{
var client = new WebClient();
client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
client.Encoding = System.Text.Encoding.UTF8;
byte[] data = Encoding.UTF8.GetBytes(jsonData); client.UploadDataCompleted += (s, e) =>
{
if (e.Error == null && e.Result != null)
{
string response = Encoding.UTF8.GetString(e.Result);
onComplete(response);
}
else
{
onError(e.Error);
}
}; client.UploadDataAsync(new Uri(url), "POST", data);
}
} http请求工具类
C# http请求工具类的更多相关文章
- WebUtils-网络请求工具类
网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...
- Http、Https请求工具类
最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...
- 微信https请求工具类
工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...
- HTTP请求工具类
HTTP请求工具类,适用于微信服务器请求,可以自测 代码; /// <summary> /// HTTP请求工具类 /// </summary> public class Ht ...
- 实现一个简单的http请求工具类
OC自带的http请求用起来不直观,asihttprequest库又太大了,依赖也多,下面实现一个简单的http请求工具类 四个文件源码大致如下,还有优化空间 MYHttpRequest.h(类定义, ...
- 远程Get,Post请求工具类
1.远程请求工具类 import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.L ...
- C#实现的UDP收发请求工具类实例
本文实例讲述了C#实现的UDP收发请求工具类.分享给大家供大家参考,具体如下: 初始化: ListeningPort = int.Parse(ConfigurationManager.AppSetti ...
- ajax请求工具类
ajax的get和post请求工具类: /** * 公共方法类 * * 使用 变量名=function()定义函数时,如果在变量名前加var,则这个变量变成局部变量 */var Common = ...
- 【原创】标准HTTP请求工具类
以下是个人在项目开发过程中,总结的Http请求工具类,主要包括四种: 1.处理http POST请求[XML格式.无解压]: 2.处理http GET请求[XML格式.无解压]: 3.处理http P ...
- 我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类
下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确,也不需要验证服务器证书中的域名是否有效. (PS:建议下 ...
随机推荐
- B-JUI文档、下载
概述 特别说明 本文档仅适用于最新版的B-JUI,网站首页或下载页可以查看B-JUI的最后更新时间. B-JUI前端管理框架适用于快速开发各类WEB管理系统,可与任意后端程序(java.php..ne ...
- 第八讲,TLS表(线程局部存储)
一丶复习线程相关知识 首先讲解TLS的时候,需要复习线程相关知识, (thread local storage ) 1.了解经典同步问题 首先我们先写一段C++代码,开辟两个线程去跑,看看会不会出现 ...
- (十)shiro之自定义Realm以及自定义Realm在web的应用demo
数据库设计 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:/ ...
- 十大经典排序【Java实现,手工作坊式】
终于把排序这个硬骨头,但是又很基础的知识点,自己手撕了一遍!之前,使用Python看着算法导论的书手撕过一遍,印象不是很深刻,容易忘记!好记性不如烂笔头!多自己思考解决问题 1,交换类CAS[最简单] ...
- PL/SQL Developer的错误提示弹框的文本显示乱码问题
问题:Windows中文环境下,PL/SQL Developer的错误提示弹框文本为乱码,如下: 解决过程:1.使用SELECT * FROM v$nls_parameters;查询得知服务器的字符集 ...
- 改善C#程序的方法
写在开头: http://www.cnblogs.com/luminji 157个建议_勘误表 一:属性 属性和方法一样.也可以是virtual和abstract. 条款2:运行时常量(read ...
- 前端开发 Vue -1windows环境搭建Vue Node开发环境
解决几个疑问: 想学习下vue.js,我理解的它是一个前端的框架,主要作用是对数据的处理,和juqery类似,所以不太理解为什么要在nodejs中npm install vue呢?在html文件中引入 ...
- IP-reputation feature
IP-reputation feature https://blog.norz.at/citrix-netscaler-ip-reputation-feature/ I recently had to ...
- Android 主Module引用依赖Module,却无法使用里面的依赖库
如果模块化开发中遇到 多模块的AndroidManifest.xml没有合并or多模块的资源文件没有合并or模块A include了模块B,而无法使用模块B内依赖的其他aar包中的类的时候or提示Su ...
- 《浏览器工作原理与实践》 <12>栈空间和堆空间:数据是如何存储的?
对于前端开发者来说,JavaScript 的内存机制是一个不被经常提及的概念 ,因此很容易被忽视.特别是一些非计算机专业的同学,对内存机制可能没有非常清晰的认识,甚至有些同学根本就不知道 JavaSc ...