C#如何用winform获取某个网站的cookies
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#如何用winform获取某个网站的cookies相关的知识,希望对你有一定的参考价值。
就是我准备用C#模拟webQQ登录,但是登录过程要获取cookies。我想知道怎么用C#在winform中获取网站的cookies,代码最好要详细点,万分感谢……
简单的说呢,就是从获取的response中,通过response.Cookies,获得已解析得到的cookie再细点说呢,其实通过response的Headers,也可以获得原始的Set-Cookie的字符串,自己解析,也可以获得和上面的response.Cookies一样的cookies。
后者会比较麻烦,但是当遇到C#本身解析cookie有bug时,就用得上了。
所有相关的获得cookie的示例代码,可以参考这里的:
【教程】模拟登陆网站 之 C#版(内含两种版本的完整的可运行的代码)
帖子里面,也会提到我的crifanLib.cs,其中里面有我(经过N多调试和实践)自己写出来的,专门处理cookie方面的(解析,更新,判断是否有效等等)函数的。
(此处不给贴地址,自己用google搜标题,即可找到我写的这些帖子不过,回复你的“参考料”中,我已贴出最后此帖子的地址)
参考资料:http://www.crifan.com/emulate_login_website_using_csharp/
参考技术A 用webbrowser控件吧,那个有。基本上通过webClient及其子类都有cookie属性的吧 参考技术B 普通网站、SSL网站我都做过可以通过winform自动登录。webQQ倒是没试过。追问能给出代码吗?最好详细点的,谢谢了
参考技术C 使用 httpRequest。post 等方式登录。
你应该先尝试使用“网路卡”等工具抓包解码,获取该网站的传参方式。 参考技术D 通过webClient把登录成功后的响应的header给截取下,在下次请求时把这些header中的cookie值带上就OK了
如何用C#的winform程序对Excel表格进行增删修查
如何用C#的winform程序对Excel表格进行增删修查 ,求高手啊!!急!!!!
using System.Data.OleDb;....
void zenshancha(string gongneng)
OleDbConnection cnn=new OleDbConnection();
cnn.ConnectionString= "Microsoft.Jet.OLEDB.4.0;Data Source=Excel 路径;Extended Properties=\\"Excel 8.0;HDR=Yes;IMEX=1\\";
try
cnn.Open();
DataSet ds=new DataSet();
string sql;
switch(gongneng)
case "增加":
sql="Insert Into [表名$](字段名,字段名...)values('"+变量值+"',...)";
break;
case "删除":
sql="Delete * from [表名$] where 条件";
break;
case "查询":
sql="Select * from [表名$]";
break;
default:
MessageBox.Show("执行命令不包含在内!");
break;
OleDbDataAdapter oda=new OleDbAdapter(sql,cnn);
oda.Fill(ds);
dataGridView.DataSource=ds.Tables[0];
private void form_load()
//初始化一个comboBox,让他的下拉列表为操作名称;
private void button1_click(....)
zengshancha(comboBox.Text.Trim()); //执行操作过程
参考技术A 这是过去曾参考应用过的方法摘一段给你应急:
一、首先处理好数据库连接字串
Excel2000-2003: string connStr = "Microsoft.Jet.Oledb.4.0;Data Source='c:\test.xls';Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";";
Excel2007: string connStr = "Microsoft.Ace.OleDb.12.0;Data Source='c:\test.xlsx';Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\";";
其中:
HDR ( Header Row )设置:
若指定值为Yes,代表 Excel 档中的工作表第一行是栏位名称
若指定值为 No,代表 Excel 档中的工作表第一行就是资料了,没有栏位名称
IMEX ( IMport EXport mode )设置
当 IMEX=0 时为"汇出模式",这个模式开启的 Excel 档案只能用来做"写入"用途。
当 IMEX=1 时为"汇入模式",这个模式开启的 Excel 档案只能用来做"读取"用途。
当 IMEX=2 时为"连结模式",这个模式开启的 Excel 档案可同时支援"读取"与"写入"用途。
二、进行表格数据的查询、插入和更新:
(假设Excel文件text.xls中存在Excel表单tree,有2列分别为id,name)
1、查询
String sql = "select id, name from [tree$]";
或
String sql = "select id, name from `tree$`;
2、插入
String sql = "insert into [tree$] (id,name) values(1,'testname');
3、更新
String sql = "update [tree$] set name='name2' where id=1;
4、数据的删除
在OleDB的连接方式下,不可以使用delete from 语句来删除某表中的某一条记录。确切的说,在此模式下,将无法删除表中的记录。即使用update语句将所有的字段写成null,打开excel文件后依然会发现保留了该空行,而且在使用oleDB连接进行查询时,依然会查询到这条空数据。追问
那怎么办? 我还要导入,导出表格!头大啊!!
追答哪能呀,这不是直接读写访问吗?哪里有导入导出操作?!如果你用心找,删除记录方法很多呀,再找了一个,参考一下,相信,我不这样,你也能自己找到的,呵呵。
你一下用了dataGridView控件,那么:
if (dataGridView1.CurrentRow != null) //当前的选中行
string id = dataGridView1.CurrentRow.Cells["id"].Value.ToString();
string sql = "delete ... where id =" + id;
... //执行sql 更新数据库,也就是在数据表中删除选中的行
dataGridView1.Rows.Remove(dataGridView1.CurrentRow) // 这是在界面上删除一行
嗯 ,谢谢, 我再找下,项目要求的是 可以导入表格,还要导出表格,还要把查询的条件结果集导出来,然后再生成图表 --------
追答要采用导入导出的话,发给你一个实例,你设计时参考。见本题的附件。
下面这个方法也供参考,excel就是个数据库
/// <summary>
/// 读取Excel文档
/// </summary>
/// <param name="Path">文件名称</param>
/// <returns>返回一个数据集</returns>
public DataSet ExcelToDS(string Path)
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = null;
strExcel="select * from [sheet1$]";
myCommand = new OleDbDataAdapter(strExcel, strConn);
ds = new DataSet();
myCommand.Fill(ds,"table1");
return ds;
/// <summary>
/// 写入Excel文档
/// </summary>
/// <param name="Path">文件名称</param>
public bool SaveFP2toExcel(string Path)
try
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
System.Data.OleDb.OleDbCommand cmd=new OleDbCommand ();
cmd.Connection =conn;
//cmd.CommandText ="UPDATE [sheet1$] SET 姓名='2005-01-01' WHERE 工号='日期'";
//cmd.ExecuteNonQuery ();
for(int i=0;i<fp2.Sheets [0].RowCount -1;i++)
if(fp2.Sheets [0].Cells[i,0].Text!="")
cmd.CommandText ="INSERT INTO [sheet1$] (工号,姓名,部门,职务,日期,时间) VALUES('"+fp2.Sheets [0].Cells[i,0].Text+ "','"+
fp2.Sheets [0].Cells[i,1].Text+"','"+fp2.Sheets [0].Cells[i,2].Text+"','"+fp2.Sheets [0].Cells[i,3].Text+
"','"+fp2.Sheets [0].Cells[i,4].Text+"','"+fp2.Sheets [0].Cells[i,5].Text+"')";
cmd.ExecuteNonQuery ();
conn.Close ();
return true;
catch(System.Data.OleDb.OleDbException ex)
System.Diagnostics.Debug.WriteLine ("写入Excel发生错误:"+ex.Message );
return false;
追问
怎么复制下,老是报错!!
参考技术C 大家实现的方法,可能各有千秋,可以取长补短,找去适合自己的方法 参考技术D 我的办法是先excel读入dataset,然后进行修改、显示。完成后导出excel追问怎么导出?
追答用第三方控件gembox
以上是关于C#如何用winform获取某个网站的cookies的主要内容,如果未能解决你的问题,请参考以下文章
C# winform 如何取得网站cookie,从而实现自动登录。