You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
5.1 KiB
117 lines
5.1 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Specialized;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Security;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
using System.Text;
|
|
using System.Web;
|
|
|
|
namespace QZWebApi.Bus
|
|
{
|
|
public class HttpHelper
|
|
{
|
|
/// <summary>
|
|
/// 创建GET方式的HTTP请求
|
|
/// </summary>
|
|
/// <param name="url">请求的URL</param>
|
|
/// <param name="parameters">随同请求GET的参数名称及参数值字典</param>
|
|
/// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>
|
|
/// <param name="timeout">请求的超时时间</param>
|
|
/// <returns></returns>
|
|
public static string CreateGetHttpRequest(string url, NameValueCollection parameters, string userAgent = "", int timeout = 90000)
|
|
{
|
|
if (string.IsNullOrEmpty(url))
|
|
{
|
|
throw new ArgumentNullException("url");
|
|
}
|
|
if (parameters != null && parameters.Count > 0)
|
|
{
|
|
if (url.Contains("?"))
|
|
{
|
|
|
|
url = $"{url}&{NameValueCollectionToString(parameters)}";
|
|
|
|
}
|
|
else
|
|
{
|
|
url = $"{url}?{NameValueCollectionToString(parameters)}";
|
|
}
|
|
}
|
|
HttpWebRequest wreq = (HttpWebRequest)WebRequest.Create(url);
|
|
wreq.Method = "GET";
|
|
wreq.Timeout = timeout;
|
|
wreq.UserAgent = (string.IsNullOrEmpty(userAgent)) ? "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8" : userAgent;
|
|
HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse();
|
|
//采用流读取,并确定编码方式
|
|
var result = "";
|
|
using (HttpWebResponse httpWebResponse = wreq.GetResponse() as HttpWebResponse)
|
|
{
|
|
using (Stream stream2 = wreq.GetResponse().GetResponseStream())
|
|
{
|
|
using (StreamReader streamReader = new StreamReader(stream2, Encoding.UTF8))
|
|
{
|
|
result = streamReader.ReadToEnd();
|
|
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public static string NameValueCollectionToString(NameValueCollection nvc)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
foreach (string key in nvc.Keys)
|
|
{
|
|
sb.AppendFormat("{0}={1}&", key, nvc[key]);
|
|
}
|
|
return sb.ToString().TrimEnd('&');
|
|
}
|
|
|
|
/// <summary>
|
|
/// 调用api返回json
|
|
/// </summary>
|
|
/// <param name="url">api地址</param>
|
|
/// <param name="jsonstr">接收参数</param>
|
|
/// <param name="type">类型</param>
|
|
/// <returns></returns>
|
|
public static string HttpPost(string url, string jsonstr)//,string type
|
|
{
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + jsonstr); //--需要封装的参数
|
|
request.CookieContainer = new CookieContainer();
|
|
//以下是发送的http头
|
|
request.Referer = "";
|
|
//request.ContentType = "text/xml";
|
|
request.Headers["Accept-Language"] = "zh-CN,zh;q=0.";
|
|
request.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3";
|
|
request.UserAgent = "User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1";
|
|
request.KeepAlive = true;
|
|
//上面的http头看情况而定,但是下面俩必须加
|
|
request.ContentType = "application/x-www-form-urlencoded";
|
|
Encoding encoding = Encoding.UTF8;//根据网站的编码自定义
|
|
request.Method = "get"; //--需要将get改为post才可行
|
|
string postDataStr;
|
|
//Stream requestStream = request.GetRequestStream();
|
|
if (jsonstr != "")
|
|
{
|
|
postDataStr = jsonstr;//--需要封装,形式如“arg=arg1&arg2=arg2”
|
|
byte[] postData = encoding.GetBytes(postDataStr);//postDataStr即为发送的数据,
|
|
//request.ContentLength = postData.Length; //写入后不允许设置此属性
|
|
//requestStream.Write(postData, 0, postData.Length);
|
|
}
|
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //远程服务器返回错误: (405) 不允许的方法/远程服务器返回错误: (500) 内部服务器错误。
|
|
Stream responseStream = response.GetResponseStream();
|
|
|
|
StreamReader streamReader = new StreamReader(responseStream, encoding);
|
|
string retString = streamReader.ReadToEnd();
|
|
|
|
streamReader.Close();
|
|
responseStream.Close();
|
|
return retString;
|
|
|
|
}
|
|
}
|
|
}
|