func (self *SrcManage) Push(req *context.Request) { if spiderId, ok := req.GetSpiderId(); ok { priority := int(req.GetPriority()) if priority > MAX_PRIORITY { priority = MAX_PRIORITY } for i, x := 0, priority+1-len(self.queue[spiderId]); i < x; i++ { self.queue[spiderId] = append(self.queue[spiderId], []*context.Request{}) } self.queue[spiderId][priority] = append(self.queue[spiderId][priority], req) } }
func (self *SrcManage) Push(req *context.Request) { spiderId, ok := req.GetSpiderId() if !ok { return } // 初始化该蜘蛛的队列 if _, ok := self.queue[spiderId]; !ok { self.mutex[spiderId] = new(sync.Mutex) self.queue[spiderId] = make(map[int][]*context.Request) } priority := req.GetPriority() // 登记该蜘蛛下该优先级队列 if _, ok := self.queue[spiderId][priority]; !ok { self.uIndex(spiderId, priority) } // 添加请求到队列 self.queue[spiderId][priority] = append(self.queue[spiderId][priority], req) }
// 添加请求到队列 func (self *scheduler) Push(req *context.Request) { pushMutex.Lock() defer func() { pushMutex.Unlock() }() if self.status == status.STOP { return } is := self.Compare(req.GetUrl() + req.GetMethod()) // 有重复则返回 if is { return } // 留作未来分发请求用 // if pholcus.Self.GetRunMode() == config.SERVER || req.CanOutsource() { // return // } self.SrcManage.Push(req) }
func (self *Surfer) Download(cReq *context.Request) *context.Response { cResp := context.NewResponse(nil) resp, err := self.download.Download(cReq.GetMethod(), cReq.GetUrl(), cReq.GetReferer(), cReq.GetPostData(), cReq.GetHeader(), cReq.GetCookies()) cResp.SetRequest(cReq) cResp.SetResponse(resp) if err != nil { cResp.SetStatus(true, err.Error()) return cResp } cResp.SetStatus(false, "") return cResp }
func (self *Surfer) Download(cReq *context.Request) *context.Response { cResp := context.NewResponse(nil) resp, err := self.download.Download(cReq.GetMethod(), cReq.GetUrl(), cReq.GetReferer(), cReq.GetPostData(), cReq.GetHeader(), cReq.GetCookies()) cResp.SetRequest(cReq) if err != nil { cResp.SetStatus(true, err.Error()) return cResp } // get converter to utf-8 body := self.changeCharsetEncodingAuto(resp.Body, resp.Header.Get("Content-Type")) //fmt.Printf("utf-8 body %v \r\n", bodyStr) defer resp.Body.Close() cResp.SetText(body) cResp.SetStatus(false, "") return cResp }