diff --git a/Frm_Main.Designer.cs b/Frm_Main.Designer.cs index 5f4375e..cb54c36 100644 --- a/Frm_Main.Designer.cs +++ b/Frm_Main.Designer.cs @@ -1,309 +1,321 @@ -namespace EnAliKeywordSearch -{ - partial class Frm_Main - { - /// - /// 必需的设计器变量。 - /// - private System.ComponentModel.IContainer components = null; - - /// - /// 清理所有正在使用的资源。 - /// - /// 如果应释放托管资源,为 true;否则为 false。 - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows 窗体设计器生成的代码 - - /// - /// 设计器支持所需的方法 - 不要 - /// 使用代码编辑器修改此方法的内容。 - /// - private void InitializeComponent() - { - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Frm_Main)); - this.SearchView = new System.Windows.Forms.DataGridView(); - this.ResultView = new System.Windows.Forms.DataGridView(); - this.search = new System.Windows.Forms.Button(); - this.max = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.state = new System.Windows.Forms.Label(); - this.saveout = new System.Windows.Forms.Button(); - this.readin = new System.Windows.Forms.Button(); - this.openFile = new System.Windows.Forms.OpenFileDialog(); - this.saveFile = new System.Windows.Forms.SaveFileDialog(); - this.clearresult = new System.Windows.Forms.Button(); - this.clearsearch = new System.Windows.Forms.Button(); - this.company = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.百度s = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.必应s = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.搜狗s = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.keyword = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.公司名称 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.关键词 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.百度r = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.必应r = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.搜狗r = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.查询时间 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - ((System.ComponentModel.ISupportInitialize)(this.SearchView)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ResultView)).BeginInit(); - this.SuspendLayout(); - // - // SearchView - // - this.SearchView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.SearchView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.company, - this.百度s, - this.必应s, - this.搜狗s, - this.keyword}); - this.SearchView.Location = new System.Drawing.Point(11, 58); - this.SearchView.Name = "SearchView"; - this.SearchView.RowTemplate.Height = 23; - this.SearchView.Size = new System.Drawing.Size(850, 200); - this.SearchView.TabIndex = 0; - // - // ResultView - // - this.ResultView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ResultView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.公司名称, - this.关键词, - this.百度r, - this.必应r, - this.搜狗r, - this.查询时间}); - this.ResultView.Location = new System.Drawing.Point(11, 293); - this.ResultView.Name = "ResultView"; - this.ResultView.RowTemplate.Height = 23; - this.ResultView.Size = new System.Drawing.Size(850, 300); - this.ResultView.TabIndex = 1; - // - // search - // - this.search.Location = new System.Drawing.Point(360, 10); - this.search.Name = "search"; - this.search.Size = new System.Drawing.Size(152, 36); - this.search.TabIndex = 2; - this.search.Text = "查 询 关 键 词"; - this.search.UseVisualStyleBackColor = true; - this.search.Click += new System.EventHandler(this.search_Click); - // - // max - // - this.max.Location = new System.Drawing.Point(663, 10); - this.max.Name = "max"; - this.max.Size = new System.Drawing.Size(83, 21); - this.max.TabIndex = 3; - this.max.Text = "20"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(592, 13); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(65, 12); - this.label1.TabIndex = 7; - this.label1.Text = "查询页数: "; - // - // state - // - this.state.AutoSize = true; - this.state.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.state.ForeColor = System.Drawing.SystemColors.ControlText; - this.state.Location = new System.Drawing.Point(98, 267); - this.state.Name = "state"; - this.state.Size = new System.Drawing.Size(37, 14); - this.state.TabIndex = 8; - this.state.Text = "状态"; - this.state.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // saveout - // - this.saveout.Location = new System.Drawing.Point(181, 29); - this.saveout.Name = "saveout"; - this.saveout.Size = new System.Drawing.Size(73, 23); - this.saveout.TabIndex = 9; - this.saveout.Text = "导出关键词"; - this.saveout.UseVisualStyleBackColor = true; - this.saveout.Click += new System.EventHandler(this.saveout_Click); - // - // readin - // - this.readin.Location = new System.Drawing.Point(19, 29); - this.readin.Name = "readin"; - this.readin.Size = new System.Drawing.Size(73, 23); - this.readin.TabIndex = 10; - this.readin.Text = "导入关键词"; - this.readin.UseVisualStyleBackColor = true; - this.readin.Click += new System.EventHandler(this.readin_Click); - // - // openFile - // - this.openFile.FileName = "openFileDialog1"; - // - // clearresult - // - this.clearresult.Location = new System.Drawing.Point(19, 264); - this.clearresult.Name = "clearresult"; - this.clearresult.Size = new System.Drawing.Size(73, 23); - this.clearresult.TabIndex = 11; - this.clearresult.Text = "清除结果"; - this.clearresult.UseVisualStyleBackColor = true; - this.clearresult.Click += new System.EventHandler(this.clearresult_Click); - // - // clearsearch - // - this.clearsearch.Location = new System.Drawing.Point(100, 29); - this.clearsearch.Name = "clearsearch"; - this.clearsearch.Size = new System.Drawing.Size(73, 23); - this.clearsearch.TabIndex = 12; - this.clearsearch.Text = "清除关键词"; - this.clearsearch.UseVisualStyleBackColor = true; - this.clearsearch.Click += new System.EventHandler(this.clearsearch_Click); - // - // company - // - this.company.HeaderText = "公司网址"; - this.company.Name = "company"; - this.company.Width = 150; - // - // 百度s - // - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.百度s.DefaultCellStyle = dataGridViewCellStyle1; - this.百度s.HeaderText = "百度第一页"; - this.百度s.Name = "百度s"; - this.百度s.Width = 90; - // - // 必应s - // - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.必应s.DefaultCellStyle = dataGridViewCellStyle2; - this.必应s.HeaderText = "必应第一页"; - this.必应s.Name = "必应s"; - this.必应s.Width = 90; - // - // 搜狗s - // - dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.搜狗s.DefaultCellStyle = dataGridViewCellStyle3; - this.搜狗s.HeaderText = "搜狗第一页"; - this.搜狗s.Name = "搜狗s"; - this.搜狗s.Width = 90; - // - // keyword - // - this.keyword.HeaderText = "关键词(用英文逗号隔开)"; - this.keyword.Name = "keyword"; - this.keyword.Width = 350; - // - // 公司名称 - // - this.公司名称.HeaderText = "公司网站"; - this.公司名称.Name = "公司名称"; - this.公司名称.Width = 150; - // - // 关键词 - // - this.关键词.HeaderText = "关键词"; - this.关键词.Name = "关键词"; - this.关键词.Width = 200; - // - // 百度r - // - dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.百度r.DefaultCellStyle = dataGridViewCellStyle4; - this.百度r.HeaderText = "百度"; - this.百度r.Name = "百度r"; - // - // 必应r - // - dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.必应r.DefaultCellStyle = dataGridViewCellStyle5; - this.必应r.HeaderText = "必应"; - this.必应r.Name = "必应r"; - // - // 搜狗r - // - dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.搜狗r.DefaultCellStyle = dataGridViewCellStyle6; - this.搜狗r.HeaderText = "搜狗"; - this.搜狗r.Name = "搜狗r"; - // - // 查询时间 - // - this.查询时间.HeaderText = "查询时间"; - this.查询时间.Name = "查询时间"; - this.查询时间.Width = 130; - // - // Frm_Main - // - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.ClientSize = new System.Drawing.Size(872, 603); - this.Controls.Add(this.clearsearch); - this.Controls.Add(this.clearresult); - this.Controls.Add(this.readin); - this.Controls.Add(this.saveout); - this.Controls.Add(this.state); - this.Controls.Add(this.label1); - this.Controls.Add(this.max); - this.Controls.Add(this.search); - this.Controls.Add(this.ResultView); - this.Controls.Add(this.SearchView); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "Frm_Main"; - this.Text = "SEO排名查询软件 2015-7-30"; - this.Load += new System.EventHandler(this.Frm_Main_Load); - ((System.ComponentModel.ISupportInitialize)(this.SearchView)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ResultView)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.DataGridView SearchView; - private System.Windows.Forms.DataGridView ResultView; - private System.Windows.Forms.Button search; - private System.Windows.Forms.TextBox max; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label state; - private System.Windows.Forms.Button saveout; - private System.Windows.Forms.Button readin; - private System.Windows.Forms.OpenFileDialog openFile; - private System.Windows.Forms.SaveFileDialog saveFile; - private System.Windows.Forms.Button clearresult; - private System.Windows.Forms.Button clearsearch; - private System.Windows.Forms.DataGridViewTextBoxColumn company; - private System.Windows.Forms.DataGridViewTextBoxColumn 百度s; - private System.Windows.Forms.DataGridViewTextBoxColumn 必应s; - private System.Windows.Forms.DataGridViewTextBoxColumn 搜狗s; - private System.Windows.Forms.DataGridViewTextBoxColumn keyword; - private System.Windows.Forms.DataGridViewTextBoxColumn 公司名称; - private System.Windows.Forms.DataGridViewTextBoxColumn 关键词; - private System.Windows.Forms.DataGridViewTextBoxColumn 百度r; - private System.Windows.Forms.DataGridViewTextBoxColumn 必应r; - private System.Windows.Forms.DataGridViewTextBoxColumn 搜狗r; - private System.Windows.Forms.DataGridViewTextBoxColumn 查询时间; - - } -} - +namespace EnAliKeywordSearch +{ + partial class Frm_Main + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Frm_Main)); + this.SearchView = new System.Windows.Forms.DataGridView(); + this.ResultView = new System.Windows.Forms.DataGridView(); + this.公司名称 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.关键词 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.百度r = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.必应r = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.搜狗r = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.查询时间 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.search = new System.Windows.Forms.Button(); + this.max = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.state = new System.Windows.Forms.Label(); + this.saveout = new System.Windows.Forms.Button(); + this.readin = new System.Windows.Forms.Button(); + this.openFile = new System.Windows.Forms.OpenFileDialog(); + this.saveFile = new System.Windows.Forms.SaveFileDialog(); + this.clearresult = new System.Windows.Forms.Button(); + this.clearsearch = new System.Windows.Forms.Button(); + this.company = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.keyword = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.百度s = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.必应s = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.搜狗s = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.sum = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.SearchView)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ResultView)).BeginInit(); + this.SuspendLayout(); + // + // SearchView + // + this.SearchView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.SearchView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.company, + this.keyword, + this.百度s, + this.必应s, + this.搜狗s, + this.sum}); + this.SearchView.Location = new System.Drawing.Point(10, 58); + this.SearchView.Name = "SearchView"; + this.SearchView.RowTemplate.Height = 23; + this.SearchView.Size = new System.Drawing.Size(850, 200); + this.SearchView.TabIndex = 0; + // + // ResultView + // + this.ResultView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ResultView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.公司名称, + this.关键词, + this.百度r, + this.必应r, + this.搜狗r, + this.查询时间}); + this.ResultView.Location = new System.Drawing.Point(11, 293); + this.ResultView.Name = "ResultView"; + this.ResultView.RowTemplate.Height = 23; + this.ResultView.Size = new System.Drawing.Size(850, 300); + this.ResultView.TabIndex = 1; + // + // 公司名称 + // + this.公司名称.HeaderText = "公司网站"; + this.公司名称.Name = "公司名称"; + this.公司名称.Width = 150; + // + // 关键词 + // + this.关键词.HeaderText = "关键词"; + this.关键词.Name = "关键词"; + this.关键词.Width = 200; + // + // 百度r + // + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.百度r.DefaultCellStyle = dataGridViewCellStyle5; + this.百度r.HeaderText = "百度"; + this.百度r.Name = "百度r"; + // + // 必应r + // + dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.必应r.DefaultCellStyle = dataGridViewCellStyle6; + this.必应r.HeaderText = "必应"; + this.必应r.Name = "必应r"; + // + // 搜狗r + // + dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.搜狗r.DefaultCellStyle = dataGridViewCellStyle7; + this.搜狗r.HeaderText = "搜狗"; + this.搜狗r.Name = "搜狗r"; + // + // 查询时间 + // + this.查询时间.HeaderText = "查询时间"; + this.查询时间.Name = "查询时间"; + this.查询时间.Width = 130; + // + // search + // + this.search.Location = new System.Drawing.Point(360, 10); + this.search.Name = "search"; + this.search.Size = new System.Drawing.Size(152, 36); + this.search.TabIndex = 2; + this.search.Text = "查 询 关 键 词"; + this.search.UseVisualStyleBackColor = true; + this.search.Click += new System.EventHandler(this.search_Click); + // + // max + // + this.max.Location = new System.Drawing.Point(663, 10); + this.max.Name = "max"; + this.max.Size = new System.Drawing.Size(83, 21); + this.max.TabIndex = 3; + this.max.Text = "20"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(592, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(65, 12); + this.label1.TabIndex = 7; + this.label1.Text = "查询页数: "; + // + // state + // + this.state.AutoSize = true; + this.state.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.state.ForeColor = System.Drawing.SystemColors.ControlText; + this.state.Location = new System.Drawing.Point(98, 267); + this.state.Name = "state"; + this.state.Size = new System.Drawing.Size(37, 14); + this.state.TabIndex = 8; + this.state.Text = "状态"; + this.state.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // saveout + // + this.saveout.Location = new System.Drawing.Point(181, 29); + this.saveout.Name = "saveout"; + this.saveout.Size = new System.Drawing.Size(73, 23); + this.saveout.TabIndex = 9; + this.saveout.Text = "导出关键词"; + this.saveout.UseVisualStyleBackColor = true; + this.saveout.Click += new System.EventHandler(this.saveout_Click); + // + // readin + // + this.readin.Location = new System.Drawing.Point(19, 29); + this.readin.Name = "readin"; + this.readin.Size = new System.Drawing.Size(73, 23); + this.readin.TabIndex = 10; + this.readin.Text = "导入关键词"; + this.readin.UseVisualStyleBackColor = true; + this.readin.Click += new System.EventHandler(this.readin_Click); + // + // openFile + // + this.openFile.FileName = "openFileDialog1"; + // + // clearresult + // + this.clearresult.Location = new System.Drawing.Point(19, 264); + this.clearresult.Name = "clearresult"; + this.clearresult.Size = new System.Drawing.Size(73, 23); + this.clearresult.TabIndex = 11; + this.clearresult.Text = "清除结果"; + this.clearresult.UseVisualStyleBackColor = true; + this.clearresult.Click += new System.EventHandler(this.clearresult_Click); + // + // clearsearch + // + this.clearsearch.Location = new System.Drawing.Point(100, 29); + this.clearsearch.Name = "clearsearch"; + this.clearsearch.Size = new System.Drawing.Size(73, 23); + this.clearsearch.TabIndex = 12; + this.clearsearch.Text = "清除关键词"; + this.clearsearch.UseVisualStyleBackColor = true; + this.clearsearch.Click += new System.EventHandler(this.clearsearch_Click); + // + // company + // + this.company.HeaderText = "公司网址"; + this.company.Name = "company"; + this.company.Width = 150; + // + // keyword + // + this.keyword.HeaderText = "关键词(用英文逗号隔开)"; + this.keyword.Name = "keyword"; + this.keyword.Width = 330; + // + // 百度s + // + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.百度s.DefaultCellStyle = dataGridViewCellStyle1; + this.百度s.HeaderText = "百度第一页"; + this.百度s.Name = "百度s"; + this.百度s.Width = 90; + // + // 必应s + // + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.必应s.DefaultCellStyle = dataGridViewCellStyle2; + this.必应s.HeaderText = "必应第一页"; + this.必应s.Name = "必应s"; + this.必应s.Width = 90; + // + // 搜狗s + // + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.搜狗s.DefaultCellStyle = dataGridViewCellStyle3; + this.搜狗s.HeaderText = "搜狗第一页"; + this.搜狗s.Name = "搜狗s"; + this.搜狗s.Width = 90; + // + // sum + // + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.sum.DefaultCellStyle = dataGridViewCellStyle4; + this.sum.HeaderText = "总计"; + this.sum.Name = "sum"; + this.sum.Width = 55; + // + // Frm_Main + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(872, 603); + this.Controls.Add(this.clearsearch); + this.Controls.Add(this.clearresult); + this.Controls.Add(this.readin); + this.Controls.Add(this.saveout); + this.Controls.Add(this.state); + this.Controls.Add(this.label1); + this.Controls.Add(this.max); + this.Controls.Add(this.search); + this.Controls.Add(this.ResultView); + this.Controls.Add(this.SearchView); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Frm_Main"; + this.Text = "SEO排名查询软件 2015-7-30"; + this.Load += new System.EventHandler(this.Frm_Main_Load); + ((System.ComponentModel.ISupportInitialize)(this.SearchView)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ResultView)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.DataGridView SearchView; + private System.Windows.Forms.DataGridView ResultView; + private System.Windows.Forms.Button search; + private System.Windows.Forms.TextBox max; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label state; + private System.Windows.Forms.Button saveout; + private System.Windows.Forms.Button readin; + private System.Windows.Forms.OpenFileDialog openFile; + private System.Windows.Forms.SaveFileDialog saveFile; + private System.Windows.Forms.Button clearresult; + private System.Windows.Forms.Button clearsearch; + private System.Windows.Forms.DataGridViewTextBoxColumn 公司名称; + private System.Windows.Forms.DataGridViewTextBoxColumn 关键词; + private System.Windows.Forms.DataGridViewTextBoxColumn 百度r; + private System.Windows.Forms.DataGridViewTextBoxColumn 必应r; + private System.Windows.Forms.DataGridViewTextBoxColumn 搜狗r; + private System.Windows.Forms.DataGridViewTextBoxColumn 查询时间; + private System.Windows.Forms.DataGridViewTextBoxColumn company; + private System.Windows.Forms.DataGridViewTextBoxColumn keyword; + private System.Windows.Forms.DataGridViewTextBoxColumn 百度s; + private System.Windows.Forms.DataGridViewTextBoxColumn 必应s; + private System.Windows.Forms.DataGridViewTextBoxColumn 搜狗s; + private System.Windows.Forms.DataGridViewTextBoxColumn sum; + + } +} + diff --git a/Frm_Main.cs b/Frm_Main.cs index 464abdd..d43d310 100644 --- a/Frm_Main.cs +++ b/Frm_Main.cs @@ -1,212 +1,245 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using AliKeywordSearch; -using System.Web; -using System.Reflection; - -namespace EnAliKeywordSearch -{ - public partial class Frm_Main : Form - { - public Frm_Main() - { - InitializeComponent(); - } - - enum SearchType - { - [UrlValue("https://www.baidu.com/s?wd={0}&pn={1}0&ie=utf-8")] - 百度, - [UrlValue("http://cn.bing.com/search?q={0}&first={1}1&FORM=PERE1")] - 必应, - [UrlValue("http://www.sogou.com/web?query={0}&page={1}&ie=utf8")] - 搜狗 - } - //360 Can'tUse url = String.Format("http://www.haosou.com/s?q={0}&pn={1}&client=aff-360daohang&ie=utf-8", HttpUtility.UrlEncode(key), i); - //BINGurl = String.Format("http://cn.bing.com/search?q={0}&first={1}1&FORM=PERE1", HttpUtility.UrlEncode(key), i - 1); - //搜狗url = String.Format("http://www.sogou.com/web?query={0}&page={1}&ie=utf8", HttpUtility.UrlEncode(key), i); - //百度url = String.Format("https://www.baidu.com/s?wd={0}&pn={1}0&ie=utf-8", HttpUtility.UrlEncode(key), i - 1); - public class UrlValue : System.Attribute - { - private string _value; - - public UrlValue(string value) - { - _value = value; - } - - public string Value - { - get { return _value; } - } - - } - - public static class UrlEnum - { - public static string GetUrl(Enum value) - { - string output = null; - Type type = value.GetType(); - - FieldInfo fi = type.GetField(value.ToString()); - UrlValue[] attrs = - fi.GetCustomAttributes(typeof(UrlValue), - false) as UrlValue[]; - if (attrs.Length > 0) - { - output = attrs[0].Value; - } - return output; - } - } - - - - private void search_Click(object sender, EventArgs e) - { - search.Enabled = false; - state.ForeColor = Color.Black; - state.ForeColor = Color.Red; - HttpHelper httpHelper = new HttpHelper(); - foreach (DataGridViewRow item in this.SearchView.Rows) - { - string cpy = item.Cells["company"].Value == null ? "" : item.Cells["company"].Value.ToString(); - string keys = item.Cells["keyword"].Value == null ? "" : item.Cells["keyword"].Value.ToString(); - if (cpy != "" && keys != "") - { - foreach (string key in keys.Split(',')) - { - if (String.IsNullOrEmpty(key)) - continue; - bool maybe = false; - int maxpage = this.ToInt(max.Text); - int index = this.ResultView.Rows.Add(); - this.ResultView.FirstDisplayedScrollingRowIndex = index; - this.ResultView.Rows[index].Cells["公司名称"].Value = cpy; - this.ResultView.Rows[index].Cells["关键词"].Value = key; - state.ForeColor = Color.Black; - Application.DoEvents(); - string pageinfo = string.Empty; - foreach (SearchType s in Enum.GetValues(typeof(SearchType))) - { - if (item.Cells[s.ToString() + "s"].Value == null) - item.Cells[s.ToString() + "s"].Value = 0; - state.Text = "正在 " + s.ToString() + " 查询 " + cpy + " 的关键词 " + key; - for (int i = 1; i <= maxpage; i++) - { - string url = String.Format(UrlEnum.GetUrl(s), HttpUtility.UrlEncode(key), (s.ToString() == "搜狗" ? i : i - 1)); - this.ResultView.Rows[index].Cells[s.ToString() + "r"].Value = "查询第" + i + "页..."; - Application.DoEvents(); - string htmldoc = httpHelper.Get(url); - if (string.IsNullOrEmpty(htmldoc)) - { - state.ForeColor = Color.Red; - state.Text = "关键词 " + key + " 在 " + s.ToString() + " 第 " + i + " 页 网页抓取失败 错误:" + HttpHelper.ErrMsg; - maybe = true; - continue; - } - string encodecpy = HttpUtility.HtmlEncode(cpy); - if (htmldoc.Contains(encodecpy)) - { - pageinfo = "第" + i + "页"; - if (i == 1) - item.Cells[s.ToString() + "s"].Value = int.Parse(item.Cells[s.ToString() + "s"].Value.ToString()) + 1; - this.ResultView.Rows[index].Cells[s.ToString() + "r"].Style.ForeColor = (i == 1 ? Color.Magenta : Color.Black); - break; - } - if (i == maxpage) - { - pageinfo = maxpage + "页以后"; - break; - } - Application.DoEvents(); - } - this.ResultView.Rows[index].Cells[s.ToString() + "r"].Value = pageinfo + (maybe ? "(可能不准确)" : ""); - this.ResultView.Rows[index].Cells[s.ToString() + "r"].Style.ForeColor = maybe ? Color.Red : this.ResultView.Rows[index].Cells[s.ToString() + "r"].Style.ForeColor; - this.ResultView.Rows[index].Cells["查询时间"].Value = DateTime.Now.ToString(); - Application.DoEvents(); - } - } - } - - Application.DoEvents(); - } - state.ForeColor = Color.Green; - state.Text = "所有关键词查询完成!"; - search.Enabled = true; - } - - private int ToInt(String str) - { - int s = 0; - int.TryParse(str, out s); - return s; - } - - private void Frm_Main_Load(object sender, EventArgs e) - { - - } - #region 窗体事件 - private void saveout_Click(object sender, EventArgs e) - { - SaveFileDialog cpm = new SaveFileDialog(); - cpm.Filter = "查排名数据|*.cpm"; - if (cpm.ShowDialog() == DialogResult.OK) - { - List data = new List(); - foreach (DataGridViewRow item in this.SearchView.Rows) - { - string cpy = item.Cells["company"].Value == null ? "" : item.Cells["company"].Value.ToString(); - string keys = item.Cells["keyword"].Value == null ? "" : item.Cells["keyword"].Value.ToString(); - if (cpy != "" && keys != "") - data.Add(cpy + "|" + keys); - } - Config cfg = new Config(cpm.FileName); - cfg.WriteListToTextFile(data); - } - } - - private void readin_Click(object sender, EventArgs e) - { - OpenFileDialog cpm = new OpenFileDialog(); - cpm.Filter = "查排名数据|*.cpm"; - if (cpm.ShowDialog() == DialogResult.OK) - { - Config cfg = new Config(cpm.FileName); - List data = cfg.ReadTextFileToList(); - string cpy = string.Empty; - string keys = string.Empty; - foreach (string item in data) - { - string[] str = item.Split('|'); - if (str.Length == 2) - { - cpy = str[0]; - keys = str[1]; - int index = this.SearchView.Rows.Add(); - this.SearchView.Rows[index].Cells["company"].Value = cpy; - this.SearchView.Rows[index].Cells["keyword"].Value = keys; - } - } - } - } - - private void clearresult_Click(object sender, EventArgs e) - { - ResultView.Rows.Clear(); - } - - private void clearsearch_Click(object sender, EventArgs e) - { - SearchView.Rows.Clear(); - } - #endregion - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using AliKeywordSearch; +using System.Web; +using System.Reflection; +using System.Text.RegularExpressions; + +namespace EnAliKeywordSearch +{ + public partial class Frm_Main : Form + { + public Frm_Main() + { + InitializeComponent(); + } + + enum SearchType + { + [UrlValue("https://www.baidu.com/s?wd={0}&pn={1}0&ie=utf-8")] + 百度, + [UrlValue("http://cn.bing.com/search?q={0}&first={1}1&FORM=PERE1")] + 必应, + [UrlValue("http://www.sogou.com/web?query={0}&page={1}&ie=utf8")] + 搜狗 + } + //360 Can'tUse url = String.Format("http://www.haosou.com/s?q={0}&pn={1}&client=aff-360daohang&ie=utf-8", HttpUtility.UrlEncode(key), i); + //BINGurl = String.Format("http://cn.bing.com/search?q={0}&first={1}1&FORM=PERE1", HttpUtility.UrlEncode(key), i - 1); + //搜狗url = String.Format("http://www.sogou.com/web?query={0}&page={1}&ie=utf8", HttpUtility.UrlEncode(key), i); + //百度url = String.Format("https://www.baidu.com/s?wd={0}&pn={1}0&ie=utf-8", HttpUtility.UrlEncode(key), i - 1); + public class UrlValue : System.Attribute + { + private string _value; + + public UrlValue(string value) + { + _value = value; + } + + public string Value + { + get { return _value; } + } + + } + + public static class UrlEnum + { + public static string GetUrl(Enum value) + { + string output = null; + Type type = value.GetType(); + + FieldInfo fi = type.GetField(value.ToString()); + UrlValue[] attrs = + fi.GetCustomAttributes(typeof(UrlValue), + false) as UrlValue[]; + if (attrs.Length > 0) + { + output = attrs[0].Value; + } + return output; + } + } + + + + private void search_Click(object sender, EventArgs e) + { + search.Enabled = false; + state.ForeColor = Color.Black; + state.ForeColor = Color.Red; + HttpHelper httpHelper = new HttpHelper(); + foreach (DataGridViewRow item in this.SearchView.Rows) + { + string cpy = item.Cells["company"].Value == null ? "" : item.Cells["company"].Value.ToString(); + string keys = item.Cells["keyword"].Value == null ? "" : item.Cells["keyword"].Value.ToString(); + if (cpy != "" && keys != "") + { + foreach (string key in keys.Split(',')) + { + if (String.IsNullOrEmpty(key)) + continue; + bool maybe = false; + int maxpage = this.ToInt(max.Text); + int index = this.ResultView.Rows.Add(); + this.ResultView.FirstDisplayedScrollingRowIndex = index; + this.ResultView.Rows[index].Cells["公司名称"].Value = cpy; + this.ResultView.Rows[index].Cells["关键词"].Value = key; + state.ForeColor = Color.Black; + Application.DoEvents(); + string pageinfo = string.Empty; + foreach (SearchType s in Enum.GetValues(typeof(SearchType))) + { + if (item.Cells[s.ToString() + "s"].Value == null) + item.Cells[s.ToString() + "s"].Value = 0; + state.Text = "正在 " + s.ToString() + " 查询 " + cpy + " 的关键词 " + key; + for (int i = 1; i <= maxpage; i++) + { + string url = String.Format(UrlEnum.GetUrl(s), HttpUtility.UrlEncode(key), (s.ToString() == "搜狗" ? i : i - 1));//s搜狗的页面值不同 + this.ResultView.Rows[index].Cells[s.ToString() + "r"].Value = "查询第" + i + "页..."; + Application.DoEvents(); + string htmldoc = httpHelper.Get(url); + if (string.IsNullOrEmpty(htmldoc)) + { + state.ForeColor = Color.Red; + state.Text = "关键词 " + key + " 在 " + s.ToString() + " 第 " + i + " 页 网页抓取失败 错误:" + HttpHelper.ErrMsg; + maybe = true; + continue; + } + if (htmldoc == "0") + { + this.ResultView.Rows[index].Cells[s.ToString() + "r"].Value = "已被屏蔽"; + this.ResultView.Rows[index].Cells[s.ToString() + "r"].Style.ForeColor = Color.Red; + break; + } + string cpyencode = HttpUtility.HtmlEncode(cpy); + int findindex = htmldoc.IndexOf(cpyencode); + if (findindex > 0) + { + string check = htmldoc.Substring(findindex, 60); + while (findindex > 0) + { + check = htmldoc.Substring(findindex, 60); + Console.WriteLine(s.ToString() + " " + i + " " + check); + if (!check.Contains("\\/")) + { + break; + } + findindex = htmldoc.IndexOf(cpyencode, findindex + 1); + } + if ((check.Contains("span") || check.Contains("><") || check.Contains(".html") || check.Contains("href") || check.Contains("%"))) + { + pageinfo = "第" + i + "页"; + if (i == 1) + item.Cells[s.ToString() + "s"].Value = int.Parse(item.Cells[s.ToString() + "s"].Value.ToString()) + 1; + this.ResultView.Rows[index].Cells[s.ToString() + "r"].Style.ForeColor = (i == 1 ? Color.Magenta : Color.Black); + break; + } + } + if (i == maxpage) + { + pageinfo = maxpage + "页以后"; + break; + } + Application.DoEvents(); + } + this.ResultView.Rows[index].Cells[s.ToString() + "r"].Value = pageinfo + (maybe ? "(可能不准确)" : ""); + this.ResultView.Rows[index].Cells[s.ToString() + "r"].Style.ForeColor = maybe ? Color.Red : this.ResultView.Rows[index].Cells[s.ToString() + "r"].Style.ForeColor; + this.ResultView.Rows[index].Cells["查询时间"].Value = DateTime.Now.ToString(); + Application.DoEvents(); + } + Console.WriteLine("==================" + key + "=================="); + } + } + if (item.Cells["keyword"].Value != null) + { + if (item.Cells["sum"].Value == null) + item.Cells["sum"].Value = 0; + foreach (SearchType s in Enum.GetValues(typeof(SearchType))) + { + int all = int.Parse(item.Cells["sum"].Value.ToString()); + int add = int.Parse(item.Cells[s.ToString() + "s"].Value.ToString()); + item.Cells["sum"].Value = all + add; + } + } + Application.DoEvents(); + } + state.ForeColor = Color.Green; + state.Text = "所有关键词查询完成!"; + search.Enabled = true; + } + + private int ToInt(String str) + { + int s = 0; + int.TryParse(str, out s); + return s; + } + + private void Frm_Main_Load(object sender, EventArgs e) + { + + } + #region 窗体事件 + private void saveout_Click(object sender, EventArgs e) + { + SaveFileDialog cpm = new SaveFileDialog(); + cpm.Filter = "查排名数据|*.cpm"; + if (cpm.ShowDialog() == DialogResult.OK) + { + List data = new List(); + foreach (DataGridViewRow item in this.SearchView.Rows) + { + string cpy = item.Cells["company"].Value == null ? "" : item.Cells["company"].Value.ToString(); + string keys = item.Cells["keyword"].Value == null ? "" : item.Cells["keyword"].Value.ToString(); + if (cpy != "" && keys != "") + data.Add(cpy + "|" + keys); + } + Config cfg = new Config(cpm.FileName); + cfg.WriteListToTextFile(data); + } + } + + private void readin_Click(object sender, EventArgs e) + { + OpenFileDialog cpm = new OpenFileDialog(); + cpm.Filter = "查排名数据|*.cpm"; + if (cpm.ShowDialog() == DialogResult.OK) + { + Config cfg = new Config(cpm.FileName); + List data = cfg.ReadTextFileToList(); + string cpy = string.Empty; + string keys = string.Empty; + foreach (string item in data) + { + string[] str = item.Split('|'); + if (str.Length == 2) + { + cpy = str[0]; + keys = str[1]; + int index = this.SearchView.Rows.Add(); + this.SearchView.Rows[index].Cells["company"].Value = cpy; + this.SearchView.Rows[index].Cells["keyword"].Value = keys; + } + } + } + } + + private void clearresult_Click(object sender, EventArgs e) + { + ResultView.Rows.Clear(); + } + + private void clearsearch_Click(object sender, EventArgs e) + { + SearchView.Rows.Clear(); + } + #endregion + } +} diff --git a/Frm_Main.resx b/Frm_Main.resx index 9648768..db911ce 100644 --- a/Frm_Main.resx +++ b/Frm_Main.resx @@ -120,6 +120,9 @@ True + + True + True @@ -129,7 +132,7 @@ True - + True diff --git a/HttpHelper.cs b/HttpHelper.cs index 89afda5..3597287 100644 --- a/HttpHelper.cs +++ b/HttpHelper.cs @@ -1,364 +1,367 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.IO.Compression; -using System.Net; -using System.Net.Security; -using System.Net.Sockets; -using System.Security.Authentication; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; - -namespace EnAliKeywordSearch -{ - public class HttpArgs - { - public enum HttpMethod - { - GET, - POST - } - public string Url { get; set; } - public string Host { get; set; } - public int Port { get; set; } - public string Accept { get; set; } - public string Referer { get; set; } - public string Cookie { get; set; } - public string Data { get; set; } - public string UA { get; set; } - public HttpMethod Method { get; set; } - } - - public class HttpHelper - { - public static int State = 0; - public static string ErrMsg = string.Empty; - /// - /// 提交方法 - /// - #region HttpWebRequest & HttpWebResponse - - /// - /// Get方法 - /// - /// 请求地址 - /// Cookies存储器 - /// 请求返回的Stream - public string Get(string url) - { - HttpArgs args = ParseURL(url); - args.Method = HttpArgs.HttpMethod.GET; - string strhtml = InternalSocketHttp(args); - return strhtml; - } - - /// - /// Post方法 - /// - /// 请求地址 - /// Post数据 - /// Cllkies存储器 - /// 请求返回的流 - public string Post(string url, - byte[] bytes, - CookieContainer cookies, - Encoding encoding) - { - return null; - } - - /// - /// 根据Url得到host - /// - /// url字符串 - /// host字符串 - private HttpArgs ParseURL(string strUrl) - { - HttpArgs args = new HttpArgs(); - - args.Host = ""; - args.Port = 80; - args.Referer = ""; - args.Cookie = ""; - args.Url = ""; - args.Accept = "text/html";//,application/xhtml+xml,application/xml,application/json;"; - args.UA = "Mozilla/5.0+(Compatible;+Baiduspider/2.0;++http://www.baidu.com/search/spider.html)"; - - //http://www.alibaba.com/products/Egg_Laying_Block_Machine/1.html - int iIndex = strUrl.IndexOf(@"//"); - if (iIndex <= 0) - return null; - //www.alibaba.com:80/products/Egg_Laying_Block_Machine/1.html - string nohttpurl = strUrl.Substring(iIndex + 2); - string address = nohttpurl; - iIndex = nohttpurl.IndexOf(@"/"); - if (iIndex > 0) - { - //www.alibaba.com:80 - address = nohttpurl.Substring(0, iIndex); - args.Url = nohttpurl.Substring(iIndex); - } - iIndex = nohttpurl.IndexOf(@":"); - if (iIndex > 0) - { - string[] tempargs = nohttpurl.Trim().Split(char.Parse(":")); - args.Host = tempargs[0]; - args.Port = int.Parse(tempargs[1]); - } - else - { - //www.alibaba.com:80 - args.Host = address; - args.Port = 80; - } - return args; - } - #endregion - - #region Socket - - string InternalSocketHttp(HttpArgs args) - { - using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) - { - try - { - socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 1000); - socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000); - socket.Connect(args.Host, args.Port); - if (socket.Connected) - { - byte[] buff = ParseHttpArgs(args); - if (socket.Send(buff) > 0) - { - List responseBytes = new List(); - byte[] buffer = new byte[1024]; - int iNumber = socket.Receive(buffer, buffer.Length, SocketFlags.None); - while (iNumber > 0)//使用了Connection: Close 所以判断长度为0 时停止接受 - { - responseBytes.AddRange(new List(buffer));//添加数据到List - iNumber = socket.Receive(buffer, buffer.Length, SocketFlags.None);//继续接收数据 - } - return ParseResponse(responseBytes.ToArray()/*转换List为数组*/, args); - } - } - } - catch (Exception e) - { - ErrMsg = e.Message; - } - return string.Empty; - } - } - - private string ParseResponse(byte[] responseBytes, HttpArgs args) - { - string responseStr = Encoding.UTF8.GetString(responseBytes); - int splitindex = responseStr.IndexOf("\r\n\r\n"); - if (splitindex > 0) - { - string responseHeader = responseStr.Substring(0, splitindex); - string responseBody = responseStr.Substring(splitindex + 4); - - if (responseHeader.StartsWith("HTTP/1.1 400 Bad Request")) - { - State = 400; - return string.Empty; - } - else if (responseHeader.StartsWith("HTTP/1.1 404")) - { - State = 404; - return string.Empty; - } - else if (responseHeader.StartsWith("HTTP/1.1 302") || responseHeader.StartsWith("HTTP/1.1 301")) - { - State = 302; - int start = responseHeader.ToUpper().IndexOf("LOCATION"); - if (start > 0) - { - string temp = responseHeader.Substring(start, responseHeader.Length - start); - string[] sArry = Regex.Split(temp, "\r\n"); - args.Url = sArry[0].Remove(0, 10); - if (args.Url == "") - return string.Empty; - return InternalSocketHttp(args); //注意:302协议需要重定向 - } - } - else if (responseHeader.StartsWith("HTTP/1.1 200")) //读取内容 - { - State = 200; - DecompressWebPage(ref responseBytes, responseHeader); - //转码 - responseBody = DecodeWebStringByHttpHeader(responseBytes, responseHeader); - responseBody = DecodeWebStringByHtmlPageInfo(responseBytes, responseBody); - } - splitindex = responseBody.IndexOf("\r\n\r\n"); - if (splitindex > 0) - responseBody = responseBody.Substring(splitindex + 4); - else - responseBody = string.Empty; - return responseBody; - } - return string.Empty; - } - #endregion - - #region Helper - - /// - /// 解压网页 - /// - /// 网页字节数组含http头 - /// 数组长度 - /// Http头字符串 - /// 网页正文开始位置 - private void DecompressWebPage(ref byte[] responseBytes, string strHeader) - { - Regex regZip = new Regex(@"Content-Encoding:\s+gzip[^\n]*\r\n", RegexOptions.IgnoreCase); - - if (regZip.IsMatch(strHeader)) - { - responseBytes = Decompress(responseBytes); - } - } - - /// - /// 解压gzip网页 - /// - /// 压缩过的字符串字节数组 - /// 解压后的字节数组 - private byte[] Decompress(byte[] szSource) - { - MemoryStream msSource = new MemoryStream(szSource); - //DeflateStream 也可以这儿 - GZipStream stream = new GZipStream(msSource, CompressionMode.Decompress); - byte[] szTotal = new byte[40 * 1024]; - long lTotal = 0; - byte[] buffer = new byte[8]; - int iCount = 0; - do - { - iCount = stream.Read(buffer, 0, 8); - if (szTotal.Length <= lTotal + iCount) //放大数组 - { - byte[] temp = new byte[szTotal.Length * 10]; - szTotal.CopyTo(temp, 0); - szTotal = temp; - } - buffer.CopyTo(szTotal, lTotal); - lTotal += iCount; - } while (iCount != 0); - byte[] szDest = new byte[lTotal]; - Array.Copy(szTotal, 0, szDest, 0, lTotal); - return szDest; - } - - /// - /// 根据Http头标记里面的字符编码解析字符串 - /// - /// 网页内容字节数组(除http头以外的内容) - /// 网页内容字节数组长度 - /// http头的字符串 - /// 转好的字符串 - private string DecodeWebStringByHttpHeader(byte[] responseBytes, string strHeader) - { - string strResponse = ""; - if (strHeader.Contains("charset=GBK") || strHeader.Contains("charset=gb2312")) - { - strResponse = Encoding.GetEncoding("GBK").GetString(responseBytes); - } - else - strResponse = Encoding.UTF8.GetString(responseBytes); - return strResponse; - } - - /// - /// 根据网页meta标记里面的字符编码解析字符串 - /// - /// 网页内容字节数组(除http头以外的内容) - /// 网页内容字节数组长度 - /// 网页内容字符串, 可能已经根据其它转码要求转换过的字符串 - /// 转好的字符串 - private string DecodeWebStringByHtmlPageInfo(byte[] responseBytes, string strResponse) - { - Regex regGB2312 = new Regex(@"]+Content-Type[^>]+gb2312[^>]*>", RegexOptions.IgnoreCase); - Regex regGBK = new Regex(@"]+Content-Type[^>]+gbk[^>]*>", RegexOptions.IgnoreCase); - Regex regBig5 = new Regex(@"]+Content-Type[^>]+Big5[^>]*>", RegexOptions.IgnoreCase); - if (regGB2312.IsMatch(strResponse) || regGBK.IsMatch(strResponse)) - strResponse = Encoding.GetEncoding("GBK").GetString(responseBytes); - if (regBig5.IsMatch(strResponse)) - strResponse = Encoding.GetEncoding("Big5").GetString(responseBytes); - return strResponse; - } - - private byte[] ParseHttpArgs(HttpArgs args) - { - StringBuilder bulider = new StringBuilder(); - if (args.Method == HttpArgs.HttpMethod.POST) - { - bulider.AppendLine(string.Format("POST {0} HTTP/1.1", args.Url)); - bulider.AppendLine("Content-Type: application/x-www-form-urlencoded"); - } - else - { - bulider.AppendLine(string.Format("GET {0} HTTP/1.1", args.Url)); - } - - bulider.AppendLine(string.Format("Host: {0}:{1}", args.Host, args.Port)); - - bulider.AppendLine("User-Agent: " + args.UA); - //"User-Agent: Mozilla/5.0+(Compatible;+Baiduspider/2.0;++http://www.baidu.com/search/spider.html)";Mozilla/5.0 (Windows NT 6.1; IE 9.0) - if (!string.IsNullOrEmpty(args.Referer)) - bulider.AppendLine(string.Format("Referer: {0}", args.Referer)); - - //bulider.AppendLine("Connection: close"); - - bulider.AppendLine("Connection: Close"); - - if (!string.IsNullOrEmpty(args.Accept)) - bulider.AppendLine(string.Format("Accept: {0}", args.Accept)); - - if (!string.IsNullOrEmpty(args.Cookie)) - bulider.AppendLine(string.Format("Cookie: {0}", args.Cookie)); - - if (args.Method == HttpArgs.HttpMethod.POST) - { - bulider.AppendLine(string.Format("Content-Length: {0}\r\n", Encoding.Default.GetBytes(args.Data).Length)); - bulider.Append(args.Data); - } - else - { - bulider.Append("\r\n"); - } - - string header = bulider.ToString(); - return Encoding.Default.GetBytes(header); - } - #endregion - - } - - public class MilliTimer - { - private static double times { get; set; } - public static void start() - { - times = getTotalMilliseconds(); - } - - public static double getTimes() - { - return getTotalMilliseconds() - times; - } - - - public static double getTotalMilliseconds() - { - return DateTime.Now.Subtract(DateTime.Parse("1970-1-1")).TotalMilliseconds; - } - } +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.IO.Compression; +using System.Net; +using System.Net.Security; +using System.Net.Sockets; +using System.Security.Authentication; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; + +namespace EnAliKeywordSearch +{ + public class HttpArgs + { + public enum HttpMethod + { + GET, + POST + } + public string Url { get; set; } + public string Host { get; set; } + public int Port { get; set; } + public string Accept { get; set; } + public string Referer { get; set; } + public string Cookie { get; set; } + public string Data { get; set; } + public string UA { get; set; } + public HttpMethod Method { get; set; } + } + + public class HttpHelper + { + public static int State = 0; + public static string ErrMsg = string.Empty; + /// + /// 提交方法 + /// + #region HttpWebRequest & HttpWebResponse + + /// + /// Get方法 + /// + /// 请求地址 + /// Cookies存储器 + /// 请求返回的Stream + public string Get(string url) + { + HttpArgs args = ParseURL(url); + args.Method = HttpArgs.HttpMethod.GET; + string strhtml = InternalSocketHttp(args); + return strhtml; + } + + /// + /// Post方法 + /// + /// 请求地址 + /// Post数据 + /// Cllkies存储器 + /// 请求返回的流 + public string Post(string url, + byte[] bytes, + CookieContainer cookies, + Encoding encoding) + { + return null; + } + + /// + /// 根据Url得到host + /// + /// url字符串 + /// host字符串 + private HttpArgs ParseURL(string strUrl) + { + HttpArgs args = new HttpArgs(); + + args.Host = ""; + args.Port = 80; + args.Referer = ""; + args.Cookie = ""; + args.Url = ""; + args.Accept = "text/html";//,application/xhtml+xml,application/xml,application/json;" + + //args.UA = "Mozilla/5.0+(Compatible;+Baiduspider/2.0;++http://www.baidu.com/search/spider.html)"; + //args.UA = @"Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,like Gecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"; + args.UA = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 UBrowser/5.2.2603.31 Safari/537.36"; + + //http://www.alibaba.com/products/Egg_Laying_Block_Machine/1.html + int iIndex = strUrl.IndexOf(@"//"); + if (iIndex <= 0) + return null; + //www.alibaba.com:80/products/Egg_Laying_Block_Machine/1.html + string nohttpurl = strUrl.Substring(iIndex + 2); + string address = nohttpurl; + iIndex = nohttpurl.IndexOf(@"/"); + if (iIndex > 0) + { + //www.alibaba.com:80 + address = nohttpurl.Substring(0, iIndex); + args.Url = nohttpurl.Substring(iIndex); + } + iIndex = nohttpurl.IndexOf(@":"); + if (iIndex > 0) + { + string[] tempargs = nohttpurl.Trim().Split(char.Parse(":")); + args.Host = tempargs[0]; + args.Port = int.Parse(tempargs[1]); + } + else + { + //www.alibaba.com:80 + args.Host = address; + args.Port = 80; + } + return args; + } + #endregion + + #region Socket + + string InternalSocketHttp(HttpArgs args) + { + using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) + { + try + { + socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 1000); + socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000); + socket.Connect(args.Host, args.Port); + if (socket.Connected) + { + byte[] buff = ParseHttpArgs(args); + if (socket.Send(buff) > 0) + { + List responseBytes = new List(); + byte[] buffer = new byte[1024]; + int iNumber = socket.Receive(buffer, buffer.Length, SocketFlags.None); + while (iNumber > 0)//使用了Connection: Close 所以判断长度为0 时停止接受 + { + responseBytes.AddRange(new List(buffer));//添加数据到List + iNumber = socket.Receive(buffer, buffer.Length, SocketFlags.None);//继续接收数据 + } + return ParseResponse(responseBytes.ToArray()/*转换List为数组*/, args); + } + } + } + catch (Exception e) + { + ErrMsg = e.Message; + } + return string.Empty; + } + } + + private string ParseResponse(byte[] responseBytes, HttpArgs args) + { + string responseStr = Encoding.UTF8.GetString(responseBytes); + int splitindex = responseStr.IndexOf("\r\n\r\n"); + if (splitindex > 0) + { + string responseHeader = responseStr.Substring(0, splitindex); + string responseBody = responseStr.Substring(splitindex + 4); + + if (responseHeader.StartsWith("HTTP/1.1 400 Bad Request")) + { + State = 400; + return string.Empty; + } + else if (responseHeader.StartsWith("HTTP/1.1 404")) + { + State = 404; + return string.Empty; + } + else if (responseHeader.StartsWith("HTTP/1.1 302") || responseHeader.StartsWith("HTTP/1.1 301")) + { + State = 302; + int start = responseHeader.ToUpper().IndexOf("LOCATION"); + if (start > 0) + { + string temp = responseHeader.Substring(start, responseHeader.Length - start); + string[] sArry = Regex.Split(temp, "\r\n"); + args.Url = sArry[0].Remove(0, 10); + if (args.Url == "") + return string.Empty; + return InternalSocketHttp(args); //注意:302协议需要重定向 + } + } + else if (responseHeader.StartsWith("HTTP/1.1 200")) //读取内容 + { + State = 200; + DecompressWebPage(ref responseBytes, responseHeader); + //转码 + responseBody = DecodeWebStringByHttpHeader(responseBytes, responseHeader); + responseBody = DecodeWebStringByHtmlPageInfo(responseBytes, responseBody); + } + splitindex = responseBody.IndexOf("\r\n\r\n"); + if (splitindex > 0) + responseBody = responseBody.Substring(splitindex + 4); + else + responseBody = string.Empty; + return responseBody; + } + return string.Empty; + } + #endregion + + #region Helper + + /// + /// 解压网页 + /// + /// 网页字节数组含http头 + /// 数组长度 + /// Http头字符串 + /// 网页正文开始位置 + private void DecompressWebPage(ref byte[] responseBytes, string strHeader) + { + Regex regZip = new Regex(@"Content-Encoding:\s+gzip[^\n]*\r\n", RegexOptions.IgnoreCase); + + if (regZip.IsMatch(strHeader)) + { + responseBytes = Decompress(responseBytes); + } + } + + /// + /// 解压gzip网页 + /// + /// 压缩过的字符串字节数组 + /// 解压后的字节数组 + private byte[] Decompress(byte[] szSource) + { + MemoryStream msSource = new MemoryStream(szSource); + //DeflateStream 也可以这儿 + GZipStream stream = new GZipStream(msSource, CompressionMode.Decompress); + byte[] szTotal = new byte[40 * 1024]; + long lTotal = 0; + byte[] buffer = new byte[8]; + int iCount = 0; + do + { + iCount = stream.Read(buffer, 0, 8); + if (szTotal.Length <= lTotal + iCount) //放大数组 + { + byte[] temp = new byte[szTotal.Length * 10]; + szTotal.CopyTo(temp, 0); + szTotal = temp; + } + buffer.CopyTo(szTotal, lTotal); + lTotal += iCount; + } while (iCount != 0); + byte[] szDest = new byte[lTotal]; + Array.Copy(szTotal, 0, szDest, 0, lTotal); + return szDest; + } + + /// + /// 根据Http头标记里面的字符编码解析字符串 + /// + /// 网页内容字节数组(除http头以外的内容) + /// 网页内容字节数组长度 + /// http头的字符串 + /// 转好的字符串 + private string DecodeWebStringByHttpHeader(byte[] responseBytes, string strHeader) + { + string strResponse = ""; + if (strHeader.Contains("charset=GBK") || strHeader.Contains("charset=gb2312")) + { + strResponse = Encoding.GetEncoding("GBK").GetString(responseBytes); + } + else + strResponse = Encoding.UTF8.GetString(responseBytes); + return strResponse; + } + + /// + /// 根据网页meta标记里面的字符编码解析字符串 + /// + /// 网页内容字节数组(除http头以外的内容) + /// 网页内容字节数组长度 + /// 网页内容字符串, 可能已经根据其它转码要求转换过的字符串 + /// 转好的字符串 + private string DecodeWebStringByHtmlPageInfo(byte[] responseBytes, string strResponse) + { + Regex regGB2312 = new Regex(@"]+Content-Type[^>]+gb2312[^>]*>", RegexOptions.IgnoreCase); + Regex regGBK = new Regex(@"]+Content-Type[^>]+gbk[^>]*>", RegexOptions.IgnoreCase); + Regex regBig5 = new Regex(@"]+Content-Type[^>]+Big5[^>]*>", RegexOptions.IgnoreCase); + if (regGB2312.IsMatch(strResponse) || regGBK.IsMatch(strResponse)) + strResponse = Encoding.GetEncoding("GBK").GetString(responseBytes); + if (regBig5.IsMatch(strResponse)) + strResponse = Encoding.GetEncoding("Big5").GetString(responseBytes); + return strResponse; + } + + private byte[] ParseHttpArgs(HttpArgs args) + { + StringBuilder bulider = new StringBuilder(); + if (args.Method == HttpArgs.HttpMethod.POST) + { + bulider.AppendLine(string.Format("POST {0} HTTP/1.1", args.Url)); + bulider.AppendLine("Content-Type: application/x-www-form-urlencoded"); + } + else + { + bulider.AppendLine(string.Format("GET {0} HTTP/1.1", args.Url)); + } + + bulider.AppendLine(string.Format("Host: {0}:{1}", args.Host, args.Port)); + + bulider.AppendLine("User-Agent: " + args.UA); + //"User-Agent: Mozilla/5.0+(Compatible;+Baiduspider/2.0;++http://www.baidu.com/search/spider.html)";Mozilla/5.0 (Windows NT 6.1; IE 9.0) + if (!string.IsNullOrEmpty(args.Referer)) + bulider.AppendLine(string.Format("Referer: {0}", args.Referer)); + + //bulider.AppendLine("Connection: close"); + + bulider.AppendLine("Connection: Close"); + + if (!string.IsNullOrEmpty(args.Accept)) + bulider.AppendLine(string.Format("Accept: {0}", args.Accept)); + + if (!string.IsNullOrEmpty(args.Cookie)) + bulider.AppendLine(string.Format("Cookie: {0}", args.Cookie)); + + if (args.Method == HttpArgs.HttpMethod.POST) + { + bulider.AppendLine(string.Format("Content-Length: {0}\r\n", Encoding.Default.GetBytes(args.Data).Length)); + bulider.Append(args.Data); + } + else + { + bulider.Append("\r\n"); + } + + string header = bulider.ToString(); + return Encoding.Default.GetBytes(header); + } + #endregion + + } + + public class MilliTimer + { + private static double times { get; set; } + public static void start() + { + times = getTotalMilliseconds(); + } + + public static double getTimes() + { + return getTotalMilliseconds() - times; + } + + + public static double getTotalMilliseconds() + { + return DateTime.Now.Subtract(DateTime.Parse("1970-1-1")).TotalMilliseconds; + } + } } \ No newline at end of file