大致步骤
1.建立连接
2.摘写请求报文
3.处理响应报文
相关信息
1.百度贴吧帖子格式
Url:tieba.baidu.com/p/id
title:
贴吧404 该帖已经被删除。
百度贴吧 该帖所在吧被合吧。
新帖创建频率:800贴/min
2.请求报文
请求报文:
GET /p/id/index.html HTTP/1.1
Host:tieba.baidu.com:80
首次尝试
Socket sc;
//建立连接
sc.Connect("tieba.baidu.com",80);
//发送报文
sc.Send(b,b.length,0);
//接受报文(接受到</title>为止)
sc.Receive(b,b.length,0);
//断开连接
sc.Close();
200ms/贴
优化
class Tie
{
Socket sc;
long P;//每张贴的id
TieList Tl;
//异步连接
public void NewSocket()
{
sc = new Socket(2, 1, 6);
P = Tl.getP();
}
public void Begin()
{
sc.BeginConnect("tieba.baidu.com",80,CallBack,null);
}
public void CallBack(IAsyncResult Ir)
{
try
{
//发送报文
sc.Send(b,b.length,0);
//接受,处理报文(接受到</title>为止)
sc.Receive(b,b.length,0);
//请求新的IP
P = Tl.getP();
}catch{}finally{
//断开连接
try
{
sc.EndConnect();
}catch{}
}
//若成功,P更新,出现异常,P不变,进入循环。
Begin();
}
}
class TieList
{
//管理多个Tie引发的线程
long P;
private readonly object o = new object();
public long GetP()
{
lock (o1)
{
long l = P;
P += W;
return l;
}
}
}
30ms/贴 线程数:50
存在问题
该服务器会在短时间内发现该程序,并限制其效率( ̄▽ ̄)"
解决办法
改写请求报文:
请求报文:
GET /p/id/index.html HTTP/1.1
Host:tieba.baidu.com:80
Cookie:TIEBA_USERTYPE = 240918a9690f******; wise_device = 0; BAIDUID = 5536A9D00334A2********: FG = 1
相当于获得一个游客身份登陆
修改前:处理速度能维持20秒左右
修改后:处理速度能维持超过5分钟
注意!!
没有一个网站管理者会喜欢遇到这种东西,因此在请求报文加上下面两行。
User-Agent://程序的名字和目的。
From://可以与你联系的途径,邮箱或微信之类的。
给大家留一个可以商讨的余地。
需要源码的请私信。
网友评论