/// <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请求工具类的更多相关文章

  1. WebUtils-网络请求工具类

    网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...

  2. Http、Https请求工具类

    最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...

  3. 微信https请求工具类

    工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...

  4. HTTP请求工具类

    HTTP请求工具类,适用于微信服务器请求,可以自测 代码; /// <summary> /// HTTP请求工具类 /// </summary> public class Ht ...

  5. 实现一个简单的http请求工具类

    OC自带的http请求用起来不直观,asihttprequest库又太大了,依赖也多,下面实现一个简单的http请求工具类 四个文件源码大致如下,还有优化空间 MYHttpRequest.h(类定义, ...

  6. 远程Get,Post请求工具类

    1.远程请求工具类   import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.L ...

  7. C#实现的UDP收发请求工具类实例

    本文实例讲述了C#实现的UDP收发请求工具类.分享给大家供大家参考,具体如下: 初始化: ListeningPort = int.Parse(ConfigurationManager.AppSetti ...

  8. ajax请求工具类

    ajax的get和post请求工具类: /** * 公共方法类 *  * 使用  变量名=function()定义函数时,如果在变量名前加var,则这个变量变成局部变量 */var Common = ...

  9. 【原创】标准HTTP请求工具类

    以下是个人在项目开发过程中,总结的Http请求工具类,主要包括四种: 1.处理http POST请求[XML格式.无解压]: 2.处理http GET请求[XML格式.无解压]: 3.处理http P ...

  10. 我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类

    下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确,也不需要验证服务器证书中的域名是否有效. (PS:建议下 ...

随机推荐

  1. MUI底部导航栏切换效果

    首先是html代码: <nav class="mui-bar mui-bar-tab"> <a href="view/templates/home/ho ...

  2. ionic 局部刷新

    $scope.$on('$ionicView.beforeEnter', console.log("刷新"); })

  3. linux服务器忘记密码操作

    当重启镜像时候 看到这个界面的时候 按1 按1之后进入如下界面 红色区域有解释 按e是编译模式,我们按e OK 这里我们选择第二行按b 进入开发者模式,然后等待启动 然后更改密码

  4. rsync备份案例

    客户端需求 1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02 2.客户端在本地打包备份(系统配置文件.应用配置等)拷贝至/back ...

  5. 线程的 run()和 start()有什么区别?(未完成)

    线程的 run()和 start()有什么区别?(未完成)

  6. B进制星球(多进制 高精加)

    https://www.luogu.org/problemnew/show/P1604 B(2<=B<=36)进制计数.编写实现B进制加法的程序. 输入输出格式 输入格式: 共3行第1行: ...

  7. SQL SERVER 2008 数据库隔离级别代码演示

    SQL SERVER 2008 数据库隔离级别代码演示   个隔离级别(其实这是SQL 工业标) 种隔离级别,本身没有优劣之分,完全取决于应用的场景. 本质上,他们是在 隔离性(紊乱程度) 和 灵活性 ...

  8. ASP.NET Uploadify 上传文件过大报错

    Uploadify上传文件原来很早之前用过,没发现什么问题.今天再使用过程中,当文件大于30M的时候就会报错404.查看错误消息提示配置最大上传太小了.需要修改. 记得原来配置上传文件大小在这里:&l ...

  9. 【转】go里面字符串转成 字节slice, 字节slice转成字符串

    原文: https://yourbasic.org/golang/convert-string-to-byte-slice/#convert-string-to-bytes ------------- ...

  10. 1115 JAVAScript基础

    目录 JavaScript 1.基础 1.1 注释 1.2 引入方式 2. 变量 2.1 变量声明 2.2 变量的命名规范 3.常量 4. 数据类型 4.1 数值型 Number 4.2 字符串型 S ...