http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3043|回复: 6

[其他] 求帮忙啊,还是cookie问题

[复制链接]
发表于 2013-4-12 12:07:18 | 显示全部楼层 |阅读模式
我用一个静态的CookiesList来存储cookie,大家下载源码帮忙看看哪里出现问题呀
cookieLogin.rar (67.93 KB, 下载次数: 240)


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-4-12 13:54:20 | 显示全部楼层
Form代码
[code=csharp]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace cookieLogin
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            HttpHelper http = new HttpHelper();
            HttpItem Hitem = new HttpItem()
            {
                URL = "http://www.zdljw.cn/getcode.asp"
            };
            pictureBox1.Image = http.GetImg(Hitem);
            //textBox3.Text = Hitem.Cookie;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            HttpHelper http = new HttpHelper();
            HttpItem Hitem = new HttpItem()
            {
                URL = "http://www.zdljw.cn/chklogin.asp",
                ContentType = "application/x-www-form-urlencoded",
                Accept = "text/html",
                Method = "POST",
                Postdata = "title=CCYoud&leibie=2&Email=baidu007%40qq.com&qq=56454&url=http%3a%2f%2fwww.baidu.com&logo=&memo=5215454sd&action=add_wz&mofei=" + textBox2.Text,
                //Cookie = textBox3.Text
            };
            string strHtmel = http.GetHtml(Hitem);
            textBox1.Text = strHtmel;
            if (strHtmel.IndexOf("window.location='index.php'") > -1)
            {
                MessageBox.Show("登录成功");
            }
            else
            {
                MessageBox.Show("登录失败");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {

        }

    }
}
[/code]
mydecms
[code=csharp]using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;

namespace cookieLogin
{
    public static class MydeCms
    {
        public static CookieContainer CookiesList = new CookieContainer();
    }
}
[/code]
楼主要干什么没看明白,是要实现登录功能,还是要登录之前要格式化一下Cookie呢
 楼主| 发表于 2013-4-12 14:24:45 | 显示全部楼层
我想的功能就是Get或者Post之前将MydeCms的CookiesList赋值给request.CookieContainer,然后在Get或者Post之后又把返回的cookie加入到MydeCms的CookiesList中,这样来实现cookie的共享
因为飞飞你的类是把cookie保存在HttpItem的实例对象里,所以我想用一个静态的实例对象来存储,那样不同的窗口都可以共享这里面的cookie了
发表于 2013-4-12 15:16:51 | 显示全部楼层
myde520 发表于 2013-4-12 14:24
我想的功能就是Get或者Post之前将MydeCms的CookiesList赋值给request.CookieContainer,然后在Get或者Post之 ...

这只是存储的方式不一样,与共享不共享没有关系吧,我的类你可以生成一个共享的Item,就行了。
 楼主| 发表于 2013-4-12 15:38:51 | 显示全部楼层
共享的Item行不通的,因为我的是多线程的啊,Item里保含Url这些信息,所以没法用Item实例共享Cookie
发表于 2013-4-12 15:54:26 | 显示全部楼层
myde520 发表于 2013-4-12 15:38
共享的Item行不通的,因为我的是多线程的啊,Item里保含Url这些信息,所以没法用Item实例共享Cookie

我的cookie是字符串类型的,你直接写个String类型的共享一下就行了吧。
发表于 2013-4-12 16:00:57 | 显示全部楼层
我周会更新上来一个分析Cookie信息的类,到时候你参考一下吧。现在的Cookie是字符串类型的,所以你要想转成列表形式,需要手动写方法转化,我周一会提供这样一个类上来。专门分析Cookie的得到的是Key,Value的形式。你的问题应该是先获得一个Cookie然后在各个线程中使用吧,那你定义一个公共的变量就行了,存储一个Cookie的值,如public string cookie=item.Cookie;这样在子线程直接使用cookie就行



你多线共享Cookie,我有点不懂,比如线程1访问A网站,线程2访问B网站,线程3访问C网站,他们的Cookie有共享的意义吗?直接每个线程里共享就行了吧,如果多线程访问的都是一个网站只是登录不同,那和上面情况一样,如果是同一个网站账户相同,那用上面的方法就能解决就是public string cookie=item.cookie;
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-6-3 22:36

© 2014-2021

快速回复 返回顶部 返回列表