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

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 11838|回复: 15

[接口] HttpHelper连续提交COOKIE如何获取?

[复制链接]
发表于 2013-1-26 17:38:55 | 显示全部楼层 |阅读模式
三次连续性提交。
第二次提交需要用第一次提交返回的COOKIE
第三次提交需要用第二次提交返回的COOKIE
这样写可以吗?

第一次:
HttpHelper http = new HttpHelper()
..省略
HttpItem item = new HttpItem();
http.getHtml(item);

第二次:
http.getHtml(item);

第三次
http.getHtml(item);


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2013-1-26 17:41:08 | 显示全部楼层
感觉提交和返回的封装还是应该分开。
比如:
private BackItem GetHtml(PostItem pi)
{}

BackItem里封装返回的东西。
发表于 2013-1-26 17:47:10 | 显示全部楼层
testben 发表于 2013-1-26 17:41
感觉提交和返回的封装还是应该分开。
比如:
private BackItem GetHtml(PostItem pi)

这个好像和分开不分开没有关系吧,
你的问题不是直接使用Item.Cookie就行了,
比如
[code=csharp]1.
HttpHelper http = new HttpHelper()
HttpItem item = new HttpItem(){URL="http://www.sufeinet.com"};
http.GetHtml(item);
2.
HttpHelper http = new HttpHelper()
item = new HttpItem(){URL="http://www.baidu.com",Cookie=item.Cookie};
http.GetHtml(item);
3.
HttpHelper http = new HttpHelper()
item = new HttpItem(){URL="http://www.cnblogs.com",Cookie=item.Cookie};
http.GetHtml(item);[/code]
这种最简单,不需要多一个返回参数的,那个太低级了。
而且一个帮助类提供那个多参数类,新手会学不会的。呵呵
你的问题看我上面的方法就行了,
我没有使用编辑器,上的同代码可能存在大小写错误,你自己实际测试一下吧。
思路就是这样,应该说使用方法就是这样,我也是一直这样用的
 楼主| 发表于 2013-1-26 18:43:34 | 显示全部楼层
admin 发表于 2013-1-26 17:47
这个好像和分开不分开没有关系吧,
你的问题不是直接使用Item.Cookie就行了,
比如

第一次:
HttpHelper http = new HttpHelper()
..省略
HttpItem item = new HttpItem();
http.getHtml(item);

第二次:
item.url = "2.html";
http.getHtml(item);

第三次
item.url = "3.html";
http.getHtml(item);

这样不也可以吗?
发表于 2013-1-26 18:45:08 | 显示全部楼层
testben 发表于 2013-1-26 18:43
第一次:
HttpHelper http = new HttpHelper()
..省略

当然,是可以的,如果你没有过多的参数的话
 楼主| 发表于 2013-1-27 12:30:52 | 显示全部楼层
admin 发表于 2013-1-26 18:45
当然,是可以的,如果你没有过多的参数的话

多谢站长。我觉得入参和回参都用item有这样一个缺点(以下是随便敲得,请忽视语法错误

//想用一个URL和COOKIE反复提交或是连续性提交 每次都要new 并且set
private void testByHttpHelper()
{
HttpItem item;
HttpHepler http = new HttpHepler();

while(true)
{
   item = new HttpItem ();
   item.url = "111.html";
   item.cookie = "xxxxxxxx";
   http.getHtml(item);
}
}

private void testTwo()
{
  httpHelper http = new httpHelper();
  Httpitem = new HttpItem ();
   item.url = "111.html";
   item.cookie = "xxxxxxxx";
while(true)
{
  
//提交后不会把返回值覆盖到item里
   Backinfo backinfo = http.getHtml(item);
}
}
发表于 2013-1-27 12:59:11 | 显示全部楼层
这个和分开不分开真没有关系,这是你代码风格有问题啊,
那有你这样写代码的
代码只有向优秀发展,如果都安你这样,不是要助长沉郁代码和不合理的代码吗?
你的代码完全可以修改如下
[code=csharp]private void testByHttpHelper()
{
HttpItem item;
HttpHepler http = new HttpHepler();  //你这是定义了下面就不需要再定义了,就算是下面需要,还能使用http这一个名称吗《这明显是语法错误的,

while(true)
{
   item = new HttpItem ();//这里不用再重新New了,
   item.url = "111.html";
   item.cookie = "xxxxxxxx";
   http.getHtml(item);
}
}

private void testTwo()
{
  httpHelper http = new httpHelper();  这里重复了
  Httpitem = new HttpItem ();
   item.url = "111.html";
   item.cookie = "xxxxxxxx";
while(true)
{
  
//提交后不会把返回值覆盖到item里
   Backinfo backinfo = http.getHtml(item);
}
}[/code]
我大致修改一下你看看,
[code=csharp]private void testByHttpHelper()
{
HttpItem item = new HttpItem ();
HttpHepler http = new HttpHepler();  

while(true)
{
   item.url = "111.html";
   item.cookie = "xxxxxxxx"; //如果这里是一样的可以写在循环的外面,而不是这里哦
   http.getHtml(item);
}
}

private void testTwo()
{
   item.url = "111.html";
   item.cookie = "xxxxxxxx";//如果这里是一样的可以写在循环的外面,而不是这里哦
while(true)
{
//提交后不会把返回值覆盖到item里
   Backinfo backinfo = http.getHtml(item);
}
}[/code]
//提交后不会把返回值覆盖到item里 这个问题和分开也没有关系啊, 就算是我分开,每次返回的也是不一样的啊,只是换一个对象而已,你如果想保存每次的不还是要这样做?效果是一样的。
这就好像是起个别名一样,不起也是可以的,
 楼主| 发表于 2013-1-27 19:22:21 | 显示全部楼层
admin 发表于 2013-1-27 12:59
这个和分开不分开真没有关系,这是你代码风格有问题啊,
那有你这样写代码的
代码只有向优秀发展,如果都 ...

我是这个意思。
你看 testByHttpHelper()方法。如果不把item的赋值放在循环里的话,item的cookie就会改变。
再看看  testTwo的方法,如果不使用传进去的item作为返回参数,只需要循环外set一次就可以
发表于 2013-1-27 19:45:02 | 显示全部楼层
testben 发表于 2013-1-27 19:22
我是这个意思。
你看 testByHttpHelper()方法。如果不把item的赋值放在循环里的话,item的cookie就会改变 ...

恩,刚开始我理解错了,不好意思哈,这个情况确实有,不过根据我的经验如果再加一个类,那么如果想每次请求都要新的cookie的话就和你的情况一样需要多负值一次了,你这个可以用第一种方法,不会影响行能的,一个负值还是可以忍受的,顶一个变量就是了,如果为此加一个类感觉还不够,有点浪费了,累会变得臃肿,一个类而已,我打算把这块整理成一个包,或者一个组建,也有可能是个类库,那是可能会这样做,现在还是看看吧,理由我感觉还不够,哈哈
 楼主| 发表于 2013-1-28 00:28:32 | 显示全部楼层
admin 发表于 2013-1-27 19:45
恩,刚开始我理解错了,不好意思哈,这个情况确实有,不过根据我的经验如果再加一个类,那么如果想每次请 ...

使用了一段时间,不是很好用呢。返回参数把我的入参给覆盖了,这样我觉得太有入侵性了。我主要是做JAVA的,用过不少API,至少还没看到这么别扭的。最近打算改一改。到时候交流下。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-11-22 14:15

© 2014-2021

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