Files
KJD_WebService/TEMUKJD/ToolForms/Old/TokenNewForm.cs
T

833 lines
32 KiB
C#

using AllBase;
using TemuKJD.BaseForms;
using NaiBa.Util.Extension;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Work;
using Work.Api;
using Work.CollectClass;
namespace TemuKJD.KJDForms.ToolForms
{
public partial class TokenNewForm : LRBaseForm
{
public TokenNewForm()
{
InitializeComponent();
this.splitContainer2.SplitterWidth = 1;
}
private void dataGridView3_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex < 0 || e.RowIndex < 0)
return;
string name = dataGridView3.Columns[e.ColumnIndex].HeaderText;
string token = dataGridView3.Rows[e.RowIndex].Cells["TokenColumn"].Value.ParseToString();
switch (name)
{
case "选择":
bool ok = !bool.Parse(dataGridView3.Rows[e.RowIndex].Cells["onSelectColumn"].Value.ToString());
dataGridView3.Rows[e.RowIndex].Cells["onSelectColumn"].Value = ok;
break;
case "激活":
CaptchaToken(token);
break;
case "检测":
CheckToken(new string[] { token });
break;
case "删除":
DeleteToken(e.RowIndex);
SaveConfig();
break;
default:
dataGridView3.Rows[e.RowIndex].Cells["onSelectColumn"].Value = !(bool)dataGridView3.Rows[e.RowIndex].Cells["onSelectColumn"].Value;
break;
}
}
private void DeleteToken(string token)
{
DataGridViewRow dgvr = dataGridView3.Rows.Cast<DataGridViewRow>().Where(p => p.Cells["TokenColumn"].Value.ParseToString() == token).FirstOrDefault();
if (dgvr != null)
{
DeleteToken(dgvr.Index);
}
}
private void CaptchaToken(string token)
{
PinDuoDuoCaptchaForm pinDuoDuoCaptchaForm = new PinDuoDuoCaptchaForm(token);
pinDuoDuoCaptchaForm.onSaveComplete += PinDuoDuoCaptchaForm_SaveComplete;
pinDuoDuoCaptchaForm.ShowDialog();
SaveConfig();
}
private void PinDuoDuoCaptchaForm_SaveComplete(object param)
{
TData<string> obj = param as TData<string>;
if (obj.Tag == 1)
{
CheckToken(new string[] { obj.Result });
}
else
{
DeleteToken(obj.Result);
SaveConfig();
}
}
private void dataGridView3_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, dataGridView3.RowHeadersWidth - 4, e.RowBounds.Height);
TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), dataGridView3.RowHeadersDefaultCellStyle.Font, rectangle,
dataGridView3.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
}
private List<string> GetCheckedTokenList()
{
List<string> tokenList = new List<string>();
for (int i = 0; i < dataGridView3.Rows.Count; i++)
{
bool onSelect = bool.Parse(dataGridView3.Rows[i].Cells["onSelectColumn"].Value.ToString());
if (onSelect)
{
string token = dataGridView3.Rows[i].Cells["TokenColumn"].Value.ToString();
tokenList.Add(token);
}
}
return tokenList;
}
private void button1_Click(object sender, EventArgs e)
{
if (this.button1.Text == "检测Token")
{
List<string> tokenList = GetCheckedTokenList();
if (tokenList.Count == 0)
{
BaseMsgForm.ShowInfo("请选择需要检测的Token码");
return;
}
CheckToken(tokenList.ToArray(), isSaveToServer);
this.button1.Text = "停止检测";
}
else
{
this.button1.Text = "检测Token";
this.statusBar.lblTaskStatus.Text = "用户取消";
this.statusBar.pgbTaskProgress.Value = this.statusBar.pgbTaskProgress.Maximum;
cancellationTokenSource.Cancel();
}
}
private bool isSaveToServer = true;
private CancellationTokenSource cancellationTokenSource = null;
private void CheckToken(string[] pddAccessTokenArr, bool isSaveToServer = false)
{
cancellationTokenSource = new CancellationTokenSource();
this.statusBar.lblTaskStatus.Text = "正在检测...";
this.statusBar.pgbTaskProgress.Value = 0;
this.statusBar.pgbTaskProgress.Maximum = pddAccessTokenArr.Length;
this.statusBar.pgbTaskProgress.Text = "0" + "/" + pddAccessTokenArr.Length;
Task.Run(() =>
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < pddAccessTokenArr.Length; i++)
{
if (cancellationTokenSource.IsCancellationRequested)
{
return;
}
string temp = pddAccessTokenArr[i].Trim();
TData<PinDuoDuoTokenInfo> obj = null;
if (GetProxyHtml.ips.Count > 0)
{
obj = CheckPDDAccessToken(temp, 1);
if (obj.Result.ProductDetailStatus == 1)
{
sb.Append(temp + ",");
}
}
if (obj == null || obj.Result == null)
{
obj = CheckPDDAccessToken(temp, 0);
if (obj.Result.ProductDetailStatus == 1)
{
sb.Append(temp + ",");
}
}
if (this.Created)
{
if (i % 5 == 0 || i == pddAccessTokenArr.Length - 1)
{
this.Invoke(new Action(() =>
{
this.statusBar.lblTaskStatus.Text = "正在检测...";
this.statusBar.pgbTaskProgress.Value = (i + 1);
this.statusBar.pgbTaskProgress.Text = (i + 1) + "/" + pddAccessTokenArr.Length;
}));
}
AddToken(obj.Result);
}
//AddToken(obj.Result);
}
if (isSaveToServer)
{
string pddAccessToken = sb.ToString().Trim(',');
if (!string.IsNullOrEmpty(pddAccessToken))
{
SaveToken(pddAccessToken);
}
}
if (this.Created)
{
this.Invoke(new Action(() =>
{
this.button1.Text = "检测Token";
this.statusBar.lblTaskStatus.Text = "检测完毕";
}));
}
SaveConfig();
});
}
public void SaveToken(string pddAccessToken)
{
string url = BaseClass.BuildObjString("sign");
string data = UserLogin.GetSignaturex() +
"&act=add_token" +
"&token=" + pddAccessToken;
var result = GetHtml.PostUtf8(url, data);
}
private void SaveConfig()
{
SavePinDuoDuoAccessToken();
}
public static void SavePinDuoDuoAccessToken()
{
SaveConfig("temp/pinduoduo_token", PinduoduoProductCollect.PinDuoDuoTokenList);
}
public static void SaveConfig<T>(string fileName, T config)
{
try
{
string filePath = AppDomain.CurrentDomain.BaseDirectory + fileName;
if (!Directory.Exists(Path.GetDirectoryName(filePath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
}
string content = JsonConvert.SerializeObject(config);
File.WriteAllText(filePath, content, Encoding.UTF8);
}
catch { }
}
private void AddToken(PinDuoDuoTokenInfo param)
{
PinDuoDuoTokenInfo tokenInfo = PinduoduoProductCollect.PinDuoDuoTokenList.Where(p => p.PDDAccessToken == param.PDDAccessToken).FirstOrDefault();
if (tokenInfo == null)
{
PinduoduoProductCollect.PinDuoDuoTokenList.Add(param);
}
else
{
tokenInfo.UserId = param.UserId;
tokenInfo.ProductDetailStatus = param.ProductDetailStatus;
tokenInfo.LoginStatus = param.LoginStatus;
tokenInfo.SearchStatus = param.SearchStatus;
tokenInfo.IsCaptcha = param.IsCaptcha;
}
AddDataGridViewRowToken(param);
}
private void UpdateDataGridViewRowToken(DataGridViewRow dgvr, PinDuoDuoTokenInfo param)
{
dgvr.Cells["StatusColumn"].Value = (param.ProductDetailStatus == 1 ? "正常" : "不能用");
dgvr.Cells["loginStatusColumn"].Value = (param.LoginStatus == 1 ? "正常" : "不能用");
dgvr.Cells["colSearchStatusColumn"].Value = (param.SearchStatus == 1 ? "正常" : "不能用");
//dgvr.Cells["colCaptchaColumn"].Value = (param.IsCaptcha ? "激活" : string.Empty);
dgvr.Cells["colCaptchaColumn"].Value = "激活";
}
private void AddDataGridViewRowToken(PinDuoDuoTokenInfo param)
{
this.Invoke(new Action(() =>
{
DataGridViewRow dgvr = dataGridView3.Rows.Cast<DataGridViewRow>().Where(p => p.Cells["TokenColumn"].Value.ToString() == param.PDDAccessToken).FirstOrDefault();
if (dgvr != null)
{
UpdateDataGridViewRowToken(dgvr, param);
}
else
{
this.dataGridView3.Rows.Add(
false,
param.PDDAccessToken,
param.LoginStatus == 1 ? "正常" : "未登录",
param.SearchStatus == 1 ? "正常" : "不能用",
param.ProductDetailStatus == 1 ? "正常" : "不能用",
//param.IsCaptcha ? "激活" : string.Empty,
"激活",
"检测",
"删除"
);
}
}));
}
public TData<PinDuoDuoTokenInfo> CheckPDDAccessToken(string pddAccessToken, int flag = 0)
{
TData<PinDuoDuoTokenInfo> obj = new TData<PinDuoDuoTokenInfo>();
obj.Result = new PinDuoDuoTokenInfo
{
PDDAccessToken = pddAccessToken
};
string url = BaseClass.NewUrl+"/personal.html";
string refere = "";
string html = "";
if (flag == 1)
html = GetProxyHtml.UploadProxyTaobao(url, refere, true, "PDDAccessToken=" + pddAccessToken);
else
html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, "PDDAccessToken=" + pddAccessToken);
if (string.IsNullOrEmpty(html))
{
obj.Result.LoginStatus = obj.Result.ProductDetailStatus = -1;
}
else if (html.Contains("我的订单"))
{
obj.Result.LoginStatus = 1;
url = "http://yangkeduo.com/goods.html?goods_id=17252982258";
if (flag == 1)
{
html = GetProxyHtml.UploadProxyTaobao(url, refere, true, "PDDAccessToken=" + pddAccessToken);
}
else
{
html = GetProductDetail(url, pddAccessToken);
if (!IsNotPinDuoDuoProductDetail(html))
{
if (html.Contains("垃圾桶"))
{
obj.Result.ProductDetailStatus = 1;
}
else
{
html = GetProductDetailByApi(17252982258, pddAccessToken);
}
}
}
if (html.Contains("goodsName")|| html.Contains("垃圾桶"))
{
obj.Result.ProductDetailStatus = 1;
}
else
{
obj.Result.ProductDetailStatus = -1;
obj.Result.IsCaptcha = true;
}
url = "http://yangkeduo.com/search_result.html?search_key=垃圾桶";
if (flag == 1)
html = GetProxyHtml.UploadProxyTaobao(url, refere, true, "PDDAccessToken=" + pddAccessToken);
else
html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, "PDDAccessToken=" + pddAccessToken);
if (html.Contains("goodsName"))
{
obj.Result.SearchStatus = 1;
}
else
{
int keyWordIndex = url.LastIndexOf('=');
if (keyWordIndex > 0)
{
var keyWord = url.Substring(keyWordIndex + 1);
if (html.Contains(keyWord))
{
obj.Result.SearchStatus = -1;
}
}
obj.Result.IsCaptcha = true;
}
}
else
{
obj.Result.LoginStatus = -1;
obj.Result.IsCaptcha = true;
}
return obj;
}
public string GetProductDetailByApi(long productId, string pddAccessToken)
{
string url = "https://yangkeduo.com/proxy/api/api/oak/integration/render?pdduid={0}";
HttpParam httpParam = new HttpParam();
string cookie = "PDDAccessToken=" + pddAccessToken;
Dictionary<string, string> cookieDict = GetCookieDictionary(cookie);
string key = "pdd_user_id";
if (cookieDict.ContainsKey(key))
{
httpParam.Url = string.Format(url, cookieDict[key]);
}
else
{
httpParam.Url = string.Format(url, 0);
}
httpParam.ContentType = "application/json;charset=UTF-8";
httpParam.PostData = JsonConvert.SerializeObject(new
{
page_version = "7",
goods_id = productId,
page_from = 0,
hostname = "yangkeduo.com",
client_time =GetUnixMilliSecondTimeStamp(DateTime.Now) + BaseClass.TimeDifferent * 1000
});
AddHeader(httpParam, "AccessToken", pddAccessToken);
AddRequestParamForPinDuoDuoWeb(httpParam, pddAccessToken);
string html = Post(httpParam);
if (html.Contains("goods_id") && html.Contains("mall_id"))
{
JObject jObj = JObject.Parse(html);
return html;
}
return "";
}
public static string Post(HttpParam httpParam)
{
try
{
HttpWebRequest request = GetHttpWebRequest(httpParam);
request.Method = "Post";
request.ServicePoint.Expect100Continue = false;
byte[] postDataByte = Encoding.UTF8.GetBytes(httpParam.PostData);
request.ContentLength = postDataByte.Length;
request.AllowAutoRedirect = false;
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(postDataByte, 0, postDataByte.Length);
}
return ReadResponse(httpParam, (HttpWebResponse)request.GetResponse());
}
catch
{
return "";
}
}
public static long GetUnixMilliSecondTimeStamp(DateTime dt)
{
DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
return (long)(dt - startTime).TotalMilliseconds;
}
public static bool IsNotPinDuoDuoProductDetail(string html)
{
return !html.Contains("topGallery") && !html.Contains("商品不存在") && !html.Contains("商品已下架") && !html.Contains("\"mall\"");
}
public string GetProductDetail(string url, string pddAccessToken)
{
HttpParam httpParam = new HttpParam { Url = url };
AddRequestParamForPinDuoDuoWeb(httpParam, pddAccessToken);
string html = Get(httpParam);
return html;
}
public static string UserAgent = "Mozilla/5.0 (Linux; Android 7.1.1; OD103 Build/NMF26F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.84 Mobile Safari/537.36";
private void AddRequestParamForPinDuoDuoWeb(HttpParam httpParam, string accessToken)
{
httpParam.Cookie = "PDDAccessToken=" + accessToken;
httpParam.UserAgent = UserAgent;
if (!string.IsNullOrEmpty(httpParam.Cookie))
{
Dictionary<string, string> cookieDict = GetCookieDictionary(httpParam.Cookie);
string key = "VerifyAuthToken";
if (cookieDict.ContainsKey(key))
{
AddHeader(httpParam, key, cookieDict[key]);
}
}
}
public static void AddHeader(HttpParam httpParam, string key, string value)
{
if (httpParam.Header == null)
{
httpParam.Header = new Dictionary<string, string>();
}
httpParam.Header.Remove(key);
httpParam.Header.Add(key, value);
}
/// <summary>
/// 字符串转成Cookie Dictionary
/// </summary>
/// <param name="cookie"></param>
/// <returns></returns>
public static Dictionary<string, string> GetCookieDictionary(string cookie)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
string[] cookieArr = SplitToArray<string>(cookie, ';');
foreach (string line in cookieArr)
{
int index = line.IndexOf('=');
if (index > 0)
{
string key = line.Substring(0, index);
string value = line.Substring(index + 1);
if (!dict.ContainsKey(key))
{
dict.Add(key, value);
}
}
}
return dict;
}
public static T[] SplitToArray<T>(string value, char split)
{
T[] arr = value.Split(new string[] { split.ToString() }, StringSplitOptions.RemoveEmptyEntries).CastSuper<T>().ToArray();
return arr;
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
isSaveToServer = checkBox1.Checked;
}
private void splitContainer1_Panel1_Paint(object sender, PaintEventArgs e)
{
}
private void TextBoxForm_SaveComplete(object param)
{
string[] lineArr = param.ParseToString().Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries).Distinct().ToArray();
List<string> tokenList = new List<string>();
foreach (string token in lineArr)
{
string[] tokenArr = token.Split(new string[] { "----" }, StringSplitOptions.RemoveEmptyEntries);
switch (tokenArr.Length)
{
case 1:
tokenList.Add(token);
break;
case 3:
// 第三个是token,格式为 14704717242----9496706479025----5FMVBP7QAK4DQNJO6NE3225GGSLBQEO2S5LT4GF3DUD2BVJVEW5Q103b187
tokenList.Add(tokenArr[2]);
break;
case 4:
// 第二个是token,格式为 13598846146----B6SD4DVKPFKTK5ZX5MWGOAS3TK6HIJNMK4AVJ6SZAZDVL4CTSP5Q110e49e----5054402823396----3045303225
tokenList.Add(tokenArr[1]);
break;
default:
foreach (string split in tokenArr)
{
// 拼多多的token是59个字符
if (split.Length == 59)
{
tokenList.Add(split);
}
}
break;
}
}
CheckToken(tokenList.ToArray(), isSaveToServer);
}
private void button3_Click(object sender, EventArgs e)
{
RefreshDataGridView();
}
public bool isLoading = false;
private void RefreshDataGridView()
{
if (isLoading)
{
BaseMsgForm.ShowInfo("当前正在加载,请稍等");
return;
}
this.statusBar.pgbTaskProgress.Maximum = PinduoduoProductCollect.PinDuoDuoTokenList.Count;
Task.Run(() =>
{
isLoading = true;
for (int i = 0; i < PinduoduoProductCollect.PinDuoDuoTokenList.Count; i++)
{
if (i % 5 == 0 || i == PinduoduoProductCollect.PinDuoDuoTokenList.Count - 1)
{
if (this.Created)
{
this.Invoke(new Action(() =>
{
this.statusBar.lblTaskStatus.Text = "正在加载...";
this.statusBar.pgbTaskProgress.Value = (i + 1);
this.statusBar.pgbTaskProgress.Text = (i + 1) + "/" + PinduoduoProductCollect.PinDuoDuoTokenList.Count;
}));
}
}
AddDataGridViewRowToken(PinduoduoProductCollect.PinDuoDuoTokenList[i]);
}
if (this.Created)
{
this.Invoke(new Action(() =>
{
this.statusBar.lblTaskStatus.Text = "加载完毕";
}));
}
isLoading = false;
});
}
private void textBox2_Click(object sender, EventArgs e)
{
TextForm textForm = new TextForm();
textForm.onSaveComplete += TextBoxForm_SaveComplete;
textForm.ShowDialog();
}
private void textBox1_Click(object sender, EventArgs e)
{
PinDuoDuoLoginForm pinDuoDuoLoginForm = new PinDuoDuoLoginForm();
pinDuoDuoLoginForm.onSaveComplete += PinDuoDuoLoginForm_SaveComplete;
pinDuoDuoLoginForm.ShowDialog();
}
private void PinDuoDuoLoginForm_SaveComplete(object obj)
{
CheckToken(new string[] { obj.ParseToString() }, true);
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
List<DataGridViewRow> dataGridViewRowList = dataGridView3.Rows.Cast<DataGridViewRow>().Where(p => p.Cells["onSelectColumn"].Value.ToString() == "True").ToList();
if (!dataGridViewRowList.Any())
{
BaseMsgForm.ShowInfo("请选择需要删除的Token码");
return;
}
foreach (DataGridViewRow dgvr in dataGridViewRowList)
{
DeleteToken(dgvr.Index);
}
SaveConfig();
}
private void DeleteToken(int rowIndex)
{
string token = this.dataGridView3.Rows[rowIndex].Cells["TokenColumn"].Value.ParseToString();
dataGridView3.Rows.RemoveAt(rowIndex);
PinduoduoProductCollect.PinDuoDuoTokenList.RemoveAll(p => p.PDDAccessToken == token);
}
private void TokenNewForm_Load(object sender, EventArgs e)
{
if (BaseClass.Ico != null)
Icon = BaseClass.Ico;
this.statusBar.pgbTaskProgress.Minimum = 0;
RefreshDataGridView();
}
private void selectAllcheckBox_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView3.Rows.Count; i++)
{
dataGridView3.Rows[i].Cells["onSelectColumn"].Value = selectAllcheckBox.Checked;
}
}
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView3.Rows.Count; i++)
{
if (checkBox2.Checked && dataGridView3.Rows[i].Cells["StatusColumn"].Value.ToString() == "不能用")
{
dataGridView3.Rows[i].Cells["onSelectColumn"].Value = true;
}
else
{
dataGridView3.Rows[i].Cells["onSelectColumn"].Value = false;
}
}
}
private void checkBox3_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView3.Rows.Count; i++)
{
if (checkBox3.Checked && dataGridView3.Rows[i].Cells["StatusColumn"].Value.ToString() == "正常")
{
dataGridView3.Rows[i].Cells["onSelectColumn"].Value = true;
}
else
{
dataGridView3.Rows[i].Cells["onSelectColumn"].Value = false;
}
}
}
public static string Get(HttpParam httpParam)
{
try
{
HttpWebRequest request = GetHttpWebRequest(httpParam);
request.Method = "Get";
return ReadResponse(httpParam, (HttpWebResponse)request.GetResponse());
}
catch (Exception ex)
{
return string.Empty;
}
}
public static string ReadResponse(HttpParam httpParam, HttpWebResponse response)
{
using (Stream stream = DecompressStream(response))
{
using (StreamReader streamReader = new StreamReader(stream, httpParam.ResponseEncoding))
{
return streamReader.ReadToEnd();
}
}
}
public static Stream DecompressStream(HttpWebResponse response)
{
Stream responseStream = response.GetResponseStream();
Stream stream = null;
if (response.ContentEncoding.ToLower().Contains("gzip"))
{
stream = new GZipStream(responseStream, CompressionMode.Decompress);
}
else if (response.ContentEncoding.ToLower().Contains("deflate"))
{
stream = new DeflateStream(responseStream, CompressionMode.Decompress);
}
if (stream == null)
{
return responseStream;
}
else
{
return stream;
}
}
public static HttpWebRequest GetHttpWebRequest(HttpParam param)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(param.Url);
if (param.Proxy != null)
{
request.Proxy = param.Proxy;
}
//else
//{
// request.Proxy = NaiBaGlobalConfig.GetDevelopProxy();
//}
if (!string.IsNullOrEmpty(param.UserAgent))
{
request.UserAgent = param.UserAgent;
}
else
{
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36";
}
if (!string.IsNullOrEmpty(param.Accept))
{
request.Accept = param.Accept;
}
else
{
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
}
if (string.IsNullOrEmpty(param.AcceptLanguage))
{
request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8");
}
else
{
request.Headers.Add("Accept-Language", param.AcceptLanguage);
}
if (!string.IsNullOrEmpty(param.ContentType))
{
request.ContentType = param.ContentType;
}
else
{
request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
}
if (!string.IsNullOrEmpty(param.Referer))
{
request.Referer = param.Referer;
}
request.Headers.Remove("Cookie");
if (!string.IsNullOrEmpty(param.Cookie))
{
request.Headers.Add("Cookie", param.Cookie);
}
if (param.Header != null)
{
foreach (KeyValuePair<string, string> header in param.Header)
{
request.Headers.Add(header.Key, header.Value);
}
}
if (param.Timeout > 0)
{
request.Timeout = param.Timeout;
}
else
{
request.Timeout = 60 * 1000;
}
return request;
}
}
public enum UserAgentTypeEnum
{
[Description("未知")]
Unknown = 0,
[Description("PC")]
PC = 1,
[Description("Mobile")]
Mobile = 2,
[Description("Pad")]
Pad = 3
}
public class HttpParam
{
public HttpParam()
{
ResponseEncoding = Encoding.UTF8;
}
public string Url { get; set; }
public string Method { get; set; }
public string PostData { get; set; }
public string ContentType { get; set; }
public string Cookie { get; set; }
public string Referer { get; set; }
public string UserAgent { get; set; }
public UserAgentTypeEnum UserAgentType { get; set; }
public string AcceptLanguage { get; set; }
public string Accept { get; set; }
[JsonIgnore]
public WebProxy Proxy { get; set; }
public int Timeout { get; set; }
public Dictionary<string, string> Header { get; set; }
public int ProxySleep { get; set; }
public int TryTimes { get; set; }
public int ActualTryTimes { get; set; }
[JsonIgnore]
public CancellationTokenSource CancellationTokenSource { get; set; }
[JsonIgnore]
public Encoding ResponseEncoding { get; set; }
}
}