Http请求帮助类
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using System.Web; namespace Nop.Core.Utils
{
public static class RequestUtility
{
///
/// 使用Get方法获取字符串结果(暂时没有加入Cookie) ///
///
///
public static string HttpGet(string url, Encoding encoding = null)
{
WebClient wc = new WebClient();
wc.Encoding = encoding ?? Encoding.UTF8;
//if (encoding != null)
//{
// wc.Encoding = encoding;
//}
return wc.DownloadString(url);
} public static dynamic HttpGet(string url)
{
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var response = client.GetAsync(url).Result; //result返回值
string result = response.Content.ReadAsStringAsync().Result; return result;
} ///
/// Post数据 /// 模型
///
/// server uri
/// 数据模型
///
public static string Put(string requestUri, T model, IDictionary parameters = null)
{
HttpClient client = new HttpClient();
if (parameters != null && parameters.Count > 0)
{
foreach (var item in parameters)
{
client.DefaultRequestHeaders.Add(item.Key, item.Value);
}
} HttpResponseMessage message = client.PutAsJsonAsync(requestUri, model).Result;
if (message.IsSuccessStatusCode)
{
return message.Content.ReadAsStringAsync().Result;
}
return null; } ///
/// 使用Get方法获取字符串结果(暂时没有加入Cookie),parameters字典里面东西会通过循环在request.Headers中添加 ///
///
///
public static string HttpGet(string url, IDictionary parameters = null, Encoding encoding = null)
{
Encoding readCoding = encoding ?? Encoding.UTF8; Uri requestUri = new Uri(url);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri);
request.UserAgent = "mozilla/4.0 (compatible; msie 6.0; windows 2000)";
request.Method = "Get";
request.ContentType = "application/x-www-form-urlencoded"; if (parameters != null && parameters.Count > 0)
{
foreach (var item in parameters)
{
request.Headers.Add(item.Key, item.Value);
}
} HttpWebResponse response = null;
try
{
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
//若是远程服务器抛出了异常,则捕获并解析
response = (HttpWebResponse)ex.Response;
} using (StreamReader sr = new StreamReader(response.GetResponseStream(), readCoding))
{
string content = sr.ReadToEnd();
return content;
}
}
finally
{
//释放请求的资源
if (response != null)
{
response.Close();
response = null;
}
if (request != null)
{
request.Abort();
}
}
} ///
/// ///
///
/// 例如Encoding.UTF8.GetBytes(json.Serialize(new { email = "123456@qq.com", password = "111111" }))
/// 字典里面东西会通过循环在request.Headers中添加
///
///
public static string HttpPost(string url, byte[] postStream, IDictionary parameters = null, Encoding encoding = null)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ProtocolVersion = HttpVersion.Version11;
request.Method = "POST"; if (parameters != null && parameters.Count > 0)
{
foreach (var item in parameters)
{
request.Headers.Add(item.Key, item.Value);
}
} request.ContentType = "application/json;charset=utf-8";
request.Accept = "application/json"; request.Timeout = 60 * 2 * 1000; // 同步接口 调用时间2分钟
request.ServicePoint.Expect100Continue = false; HttpWebResponse response = null;
try
{
postStream = postStream ?? new byte[] { };
request.ContentLength = postStream.Length;
var requestStream = request.GetRequestStream();
requestStream.Write(postStream, 0, postStream.Length);
requestStream.Close();
response = (HttpWebResponse)request.GetResponse();
using (var responseStream = response.GetResponseStream())
{
if (responseStream != null)
{
using (StreamReader myStreamReader = new StreamReader(responseStream, encoding ?? Encoding.UTF8))
{
return myStreamReader.ReadToEnd();
}
}
}
}
catch (Exception ex)
{ }
finally
{
if (response != null)
{
response.Close();
}
request.Abort();
}
return "";
} ///
/// Post数据 /// 模型
///
/// server uri
/// 数据模型
///
public static string Post(string requestUri, T model, IDictionary parameters = null)
{
HttpClient client = new HttpClient();
if (parameters != null && parameters.Count > 0)
{
foreach (var item in parameters)
{
client.DefaultRequestHeaders.Add(item.Key, item.Value);
}
} HttpResponseMessage message = client.PostAsJsonAsync(requestUri, model).Result;
if (message.IsSuccessStatusCode)
{
return message.Content.ReadAsStringAsync().Result;
}
return null; }
///
/// 使用Post方法获取字符串结果 ///
///
public static string HttpPost(string url, CookieContainer cookieContainer = null, Dictionary formData = null, Encoding encoding = null)
{
return HttpPost(url, cookieContainer, formData, encoding, 12000);
}
public static string HttpPost(string url, CookieContainer cookieContainer = null, Dictionary formData = null, Encoding encoding = null, int timeout = 20)
{
string dataString = GetQueryString(formData);
var formDataBytes = formData == null ? new byte[0] : (encoding == null ? Encoding.UTF8.GetBytes(dataString) : encoding.GetBytes(dataString));
using (MemoryStream ms = new MemoryStream())
{
ms.Write(formDataBytes, 0, formDataBytes.Length);
ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置
string ret = HttpPost(url, cookieContainer, ms, false, encoding, timeout);
return ret;
}
}
///
/// 使用Post方法获取字符串结果 ///
///
///
public static string HttpPost(string url, CookieContainer cookieContainer = null, string fileName = null, Encoding encoding = null)
{
//读取文件
FileStream fileStream = null;
if (!string.IsNullOrEmpty(fileName) && File.Exists(fileName))
{
fileStream = new FileStream(fileName, FileMode.Open);
}
return HttpPost(url, cookieContainer, fileStream, true, encoding);
} ///
/// 使用Post方法获取字符串结果 ///
///
///
///
/// postStreams是否是文件流
///
public static string HttpPost(string url, CookieContainer cookieContainer = null, Stream postStream = null, bool isFile = false, Encoding encoding = null, int timeout = 1200000)
{
ServicePointManager.DefaultConnectionLimit = 200;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postStream != null ? postStream.Length : 0;
request.Timeout = timeout;
if (cookieContainer != null)
{
request.CookieContainer = cookieContainer;
}
if (postStream != null)
{
//postStream.Position = 0; //上传文件流
Stream requestStream = request.GetRequestStream(); byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0)
{
requestStream.Write(buffer, 0, bytesRead);
} postStream.Close();//关闭文件访问
}
HttpWebResponse response = null;
try
{
response = (HttpWebResponse)request.GetResponse(); if (cookieContainer != null)
{
response.Cookies = cookieContainer.GetCookies(response.ResponseUri);
} using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader myStreamReader = new StreamReader(responseStream, encoding ?? Encoding.GetEncoding("utf-8")))
{
string retString = myStreamReader.ReadToEnd();
return retString;
}
}
}
catch (Exception ex)
{
return "";
}
finally
{
if (response != null)
{
response.Close();
response = null;
}
if (request != null)
{
request.Abort();
}
} } ///
/// 请求是否发起自微信客户端的浏览器 ///
///
///
public static bool IsWeixinClientRequest(this HttpContext httpContext)
{
return !string.IsNullOrEmpty(httpContext.Request.UserAgent) &&
httpContext.Request.UserAgent.Contains("MicroMessenger");
} ///
/// 组装QueryString的方法 ///
/// 参数之间用&连接,首位没有符号,如:a=1&b=2&c=3
///
///
public static string GetQueryString(this Dictionary formData)
{
if (formData == null || formData.Count == 0)
{
return "";
} StringBuilder sb = new StringBuilder(); var i = 0;
foreach (var kv in formData)
{
i++;
sb.AppendFormat("{0}={1}", kv.Key, kv.Value);
if (i < formData.Count)
{
sb.Append("&");
}
} return sb.ToString();
} ///
/// 封装System.Web.HttpUtility.HtmlEncode ///
///
///
public static string HtmlEncode(this string html)
{
return System.Web.HttpUtility.HtmlEncode(html);
}
///
/// 封装System.Web.HttpUtility.HtmlDecode ///
///
///
public static string HtmlDecode(this string html)
{
return System.Web.HttpUtility.HtmlDecode(html);
}
///
/// 封装System.Web.HttpUtility.UrlEncode ///
///
///
public static string UrlEncode(this string url)
{
return System.Web.HttpUtility.UrlEncode(url);
}
///
/// 封装System.Web.HttpUtility.UrlDecode ///
///
///
public static string UrlDecode(this string url)
{
return System.Web.HttpUtility.UrlDecode(url);
}
}
public class AsyncRequestUtility
{
public Action OnPostSuccess { get; set; }
public void HttpPost(string url, CookieContainer cookieContainer = null, Dictionary formData = null, Encoding encoding = null)
{
HttpPost(url, cookieContainer, formData, encoding, 12000);
}
public void HttpPost(string url, CookieContainer cookieContainer = null, Dictionary formData = null, Encoding encoding = null, int timeout = 20)
{
string dataString = GetQueryString(formData);
var formDataBytes = formData == null ? new byte[0] : Encoding.UTF8.GetBytes(dataString);
using (MemoryStream ms = new MemoryStream())
{
ms.Write(formDataBytes, 0, formDataBytes.Length);
ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置
HttpPost(url, cookieContainer, ms, false, encoding, timeout);
}
}
///
/// 使用Post方法获取字符串结果 ///
///
///
public void HttpPost(string url, CookieContainer cookieContainer = null, string fileName = null, Encoding encoding = null)
{
//读取文件
FileStream fileStream = null;
if (!string.IsNullOrEmpty(fileName) && File.Exists(fileName))
{
fileStream = new FileStream(fileName, FileMode.Open);
}
HttpPost(url, cookieContainer, fileStream, true, encoding);
}
public void HttpPost(string url, CookieContainer cookieContainer = null, Stream postStream = null, bool isFile = false, Encoding encoding = null, int timeout = 1200000)
{
ServicePointManager.DefaultConnectionLimit = 200;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postStream != null ? postStream.Length : 0;
request.Timeout = timeout;
if (cookieContainer != null)
{
request.CookieContainer = cookieContainer;
}
if (postStream != null)
{
//postStream.Position = 0; //上传文件流
Stream requestStream = request.GetRequestStream(); byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0)
{
requestStream.Write(buffer, 0, bytesRead);
} postStream.Close();//关闭文件访问
}
request.BeginGetResponse(new AsyncCallback(this.ResponseCallback), request);
}
private void ResponseCallback(IAsyncResult ar)
{
HttpWebRequest req = (HttpWebRequest)ar.AsyncState; ;
HttpWebResponse resp = null;
try
{
resp = (HttpWebResponse)req.EndGetResponse(ar);
string content = "";
using (Stream responseStream = resp.GetResponseStream())
{
using (StreamReader sr = new StreamReader(responseStream, Encoding.UTF8))
{
content = sr.ReadToEnd();
}
} if (OnPostSuccess != null)
{
OnPostSuccess(content);
} }
finally
{
if (resp != null)
{
resp.Close();
resp.Dispose();
}
req.Abort();
} }
private string GetQueryString(Dictionary formData)
{
if (formData == null || formData.Count == 0)
{
return "";
} StringBuilder sb = new StringBuilder(); var i = 0;
foreach (var kv in formData)
{
i++;
sb.AppendFormat("{0}={1}", kv.Key, kv.Value);
if (i < formData.Count)
{
sb.Append("&");
}
} return sb.ToString();
}
}
}
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 ...
- Java请求参数类QueryParameter
import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.StringUtils; /** * 请求 ...
- 实现一个简单的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 ...
随机推荐
- 分形之闵可夫斯基(Minkowski)
与上一篇文章分形之正方形折线相似,闵可夫斯基分形也是分形出正方体,不同之处是它分出了两个正方体. 核心代码: static void FractalMinkowski(const Vector3&am ...
- 利用C#迭代器的一个杨辉三角示例
身边有个朋友在跟着廖雪峰的教程学习python,途中遇到了"在Python中使用迭代器打印杨辉三角"的问题,我在帮忙解决的同时顺手写了个简单的C#版本以供补充. internal ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (二)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- jquery banner 轮播配置方法
1 概述 Banner可以作为网站页面的横幅广告,也可以作为游行活动时用的旗帜,还可以是报纸杂志上的大标题.Banner主要体现中心意旨,形象鲜明表达最主要的情感思想或宣传中心.在以往很多项目中主要体 ...
- “全栈2019”Java多线程第三十三章:await与signal/signalAll
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- Python random模块 获取随机数的使用
random.randomrandom.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniformrandom.uniform(a, b),用 ...
- 反射 方法和函数 type
1. isinstance/issubclass/type *** issubclass 判断xxx类是否是xxx类的子类 class Animal: pass class Cat(Animal): ...
- python音乐播放器第二版
此代码是上一期的改版 需要用到的Python库有 .pygame 2.time 3.xmusic(我自己写的用来做音乐索引) .colorama(美观) 推荐使用pip安装 方法: pip ins ...
- centos7 初始化脚本
#!/bin/bash # 时间: 2018-11-21 # 作者: HuYuan # 描述: CentOS 7 初始化脚本 # 加载配置文件 if [ -n "${1}" ];t ...
- Zookeeper配置文件中的配置项解释和Zookeeper的安装
zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg.其中各配置项的含义,解释如下: 1.tickTime:CS通信心跳时间Zoo ...