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:建议下 ...
随机推荐
- 在论坛中出现的比较难的sql问题:5(row_number函数 分页、随机返回数据)
原文:在论坛中出现的比较难的sql问题:5(row_number函数 分页.随机返回数据) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 1.在inner join后, ...
- Mac下面配置oh-my-ssh
想了想,把微博里的转到这里来比较靠谱 配置oh-my-ssh: 1.git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh ...
- Array + two points leetcode.18 - 4Sum
题面 Given an array nums of n integers and an integer target, are there elements a, b, c, and d in num ...
- Linux报错排解
1.Loaded plugins: product-id, search-disabled-repos, subscription-manager This system is not registe ...
- css-两个div并排,左边宽度固定右边自适应的布局 的实现方法
<div class= "container"> <div class="left"></div> <div clas ...
- Flutter——AppBar组件(顶部导航组件)
AppBar组件的常用属性如下: 属性 描述 leading 在标题前面显示的一个控件,在首页通常显示应用的 logo:在其他界面通常显示为返回按钮 title 标题,通常显示为当前界面的标题文字,可 ...
- [Mac][Python][Virtualenv]安装配置和使用
安装帮助文档安装VirtualEnv报错如下 tekiMacBook-Air:workspaces hbai$ source /usr/local/bin/virtualenvwrapper.sh / ...
- PyQt5多个GUI界面设计
版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/90454379 - 写在前面 本科毕业设计终于告一段落了.特 ...
- H5之postMessage
对于跨域我们有很多的解决方案,今天我来分享一下postMessage的那点事,postMessage是html5新增的一个解决跨域的一个方法,不过很可惜万恶的ie6,7不支持 postMessage( ...
- gdb设置条件断点
b +行号 if i==9:设置条件断点 finish:执行到当前函数返回处(退出函数) bt:打印栈帧关系