/// <summary>
/// 获取网页Html,采用Get方式
/// </summary>
/// <param name="url">目标地址</param>
/// <param name="refUrl">Referer地址</param>
/// <param name="txtCode">文本编码类型</param>
/// <param name="headers">header集合</param>
/// <param name="customHeaders">自定义header集合</param>
/// <returns></returns>
public static SpiderResponse GetHtmlByGet(string url, string refUrl, Encoding txtCode,
Dictionary<HttpRequestHeader, string> headers = null, Dictionary<string, string> customHeaders = null)
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((a, b, c, d) => { return true; });
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "GET";
req.Timeout = SiteBaseConfig.HttpRequetTimeout;
req.KeepAlive = false;
if (!string.IsNullOrEmpty(refUrl))
req.Referer = refUrl;
if (headers != null)
{
foreach (HttpRequestHeader header in headers.Keys)
{
req.Headers.Add(header, headers[header]);
}
}
if (customHeaders != null)
{
foreach (string header in customHeaders.Keys)
{
req.Headers.Add(header, customHeaders[header]);
}
}
var result = new SpiderResponse(url);
HttpWebResponse resp = null;
try
{
resp = (HttpWebResponse)req.GetResponse();
using (StreamReader sr = new StreamReader(resp.GetResponseStream(), txtCode))
{
result.RespContent = sr.ReadToEnd();
}
}
catch (Exception ex)
{
result.ReqError(ex);
}
finally
{
if (resp != null)
{
resp.Close();
resp = null;
}
req.Abort();
req = null;
}
return result;
}
/// <summary>
/// 获取网页Html,采用POST方式
/// </summary>
/// <param name="url">目标地址</param>
/// <param name="refUrl">Referer地址</param>
/// <param name="postContent">post内容</param>
/// <param name="txtCode">文本编码类型</param>
/// <param name="contentType">请求内容类型</param>
/// <param name="headers">标准header集合</param>
/// <param name="customHeaders">自定义header集合</param>
/// <param name="timeout">超时时间(缺省为0,代表不设置用Web.Config中配置的超时时间。单位毫秒)</param>
/// <param name="httpVer">http版本</param>
/// <returns></returns>
public static SpiderResponse GetHtmlByPost(string url, string refUrl, string postContent, Encoding txtCode,
EHttpContentType contentType = EHttpContentType.KeyValue,Dictionary<HttpRequestHeader, string> headers = null,
Dictionary<string, string> customHeaders = null, int timeout = 0,Version httpVer = null)
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((a, b, c, d) => { return true; });
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
if (httpVer != null)
req.ProtocolVersion = httpVer;
req.Method = "POST";
if (timeout == 0)
req.Timeout = SiteBaseConfig.HttpRequetTimeout;
else
req.Timeout = timeout;
req.KeepAlive = false;
req.ContentType = Utility.GetEnumDescriptionName(contentType);
if (!string.IsNullOrEmpty(refUrl))
req.Referer = refUrl;
if (headers != null)
{
foreach (HttpRequestHeader header in headers.Keys)
{
req.Headers.Add(header, headers[header]);
}
}
if (customHeaders != null)
{
foreach (string header in customHeaders.Keys)
{
req.Headers.Add(header, customHeaders[header]);
}
}
var result = new SpiderResponse(url, postContent);
HttpWebResponse resp = null;
try
{
byte[] bs = txtCode.GetBytes(postContent);
req.ContentLength = bs.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(bs, 0, bs.Length);
}
resp = (HttpWebResponse)req.GetResponse();
using (StreamReader sr = new StreamReader(resp.GetResponseStream(), txtCode))
{
result.RespContent = sr.ReadToEnd();
}
}
catch (Exception ex)
{
result.ReqError(ex);
}
finally
{
if (resp != null)
{
resp.Close();
resp = null;
}
req.Abort();
req = null;
}
return result;
}
本文介绍了使用C#后台获取网页接口数据的两种方法,分别是GET和POST方式。详细讲解了如何设置请求参数、HTTP头信息,并提供了完整的代码示例。
2174

被折叠的 条评论
为什么被折叠?



