public class HttpHelper {
private static CookieContainer _cc = new CookieContainer();
private static WebProxy _proxy;
private static int _delayTime;
private static int _timeout = 120000; // The default is 120000 milliseconds (120 seconds).
private static int _tryTimes = 3; // 默認重試3次
private static string _lastUrl = string.Empty;
private static string reqUserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; InfoPath.2)";
// 無 referer 的 Get
public static string Get(string url) {
string data = Get(url, _lastUrl);
_lastUrl = url;
return data;
}
/// <summary>
/// Get data from server
/// </summary>
/// <param name="url"></param>
/// <returns>Return content</returns>
public static string Get(string url, string referer)
{
int failedTimes = _tryTimes;
while (failedTimes-- > 0) {
try {
DelaySomeTime();
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(new Uri(url));
req.UserAgent = reqUserAgent;
req.CookieContainer = _cc;
req.Referer = referer;
req.Method = "GET";
req.Timeout = _timeout;
if (null != _proxy && null != _proxy.Credentials) {
req.UseDefaultCredentials = true;
}
req.Proxy = _proxy;
//接收返回字串
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
return sr.ReadToEnd();
} catch (Exception e) {
//TraceLog.Error("HTTP GET Error: " + e.Message);
//TraceLog.Error("Url: " + url);
}
}
return string.Empty;
}
public static void Download(string url, string localfile)
{
WebClient client = new WebClient();
client.DownloadFile(url, localfile);
}
private static void DelaySomeTime()
{
if (_delayTime > 0) {
Random rd = new Random();
int delayTime = _delayTime * 1000 + rd.Next(1000);
Thread.Sleep(delayTime);
}
}
/// <summary>
/// Set Proxy
/// </summary>
/// <param name="server"></param>
/// <param name="port"></param>
public static void SetProxy(string server, int port, string username, string password)
{
if (null != server && port > 0) {
_proxy = new WebProxy(server, port);
if (null != username && null != password) {
_proxy.Credentials = new NetworkCredential(username, password);
_proxy.BypassProxyOnLocal = true;
}
}
}
/// <summary>
/// Set delay connect time
/// </summary>
/// <param name="delayTime"></param>
public static void SetDelayConnect(int delayTime)
{
_delayTime = delayTime;
}
/// <summary>
/// Set the timeout for each http request
/// </summary>
/// <param name="timeout"></param>
public static void SetTimeOut(int timeout)
{
if (timeout > 0) {
_timeout = timeout;
}
}
/// <summary>
/// Set the try times for each http request
/// </summary>
/// <param name="times"></param>
public static void SetTryTimes(int times)
{
if (times > 0) {
_tryTimes = times;
}
}
}
C#是沒有自帶HttpHelper的,這個是別人編寫的一個叫HttpHelper的類來的
System.Net;
System.IO;