@@ -58,44 +58,58 @@ func (s *Source) Run(ctx context.Context, domain string, session *subscraping.Se
5858 }
5959
6060 // quake api doc https://quake.360.cn/quake/#/help
61- var requestBody = fmt .Appendf (nil , `{"query":"domain: %s", "include":["service.http.host"], "latest": true, "start":0, "size":500}` , domain )
62- resp , err := session .Post (ctx , "https://quake.360.net/api/v3/search/quake_service" , "" , map [string ]string {
63- "Content-Type" : "application/json" , "X-QuakeToken" : randomApiKey ,
64- }, bytes .NewReader (requestBody ))
65- if err != nil {
66- results <- subscraping.Result {Source : s .Name (), Type : subscraping .Error , Error : err }
67- s .errors ++
68- session .DiscardHTTPResponse (resp )
69- return
70- }
61+ var pageSize = 500
62+ var start = 0
63+ var totalResults = - 1
64+
65+ for {
66+ var requestBody = fmt .Appendf (nil , `{"query":"domain: %s", "include":["service.http.host"], "latest": true, "size":%d, "start":%d}` , domain , pageSize , start )
67+ resp , err := session .Post (ctx , "https://quake.360.net/api/v3/search/quake_service" , "" , map [string ]string {
68+ "Content-Type" : "application/json" , "X-QuakeToken" : randomApiKey ,
69+ }, bytes .NewReader (requestBody ))
70+ if err != nil {
71+ results <- subscraping.Result {Source : s .Name (), Type : subscraping .Error , Error : err }
72+ s .errors ++
73+ session .DiscardHTTPResponse (resp )
74+ return
75+ }
7176
72- var response quakeResults
73- err = jsoniter .NewDecoder (resp .Body ).Decode (& response )
74- if err != nil {
75- results <- subscraping.Result {Source : s .Name (), Type : subscraping .Error , Error : err }
76- s .errors ++
77+ var response quakeResults
78+ err = jsoniter .NewDecoder (resp .Body ).Decode (& response )
79+ if err != nil {
80+ results <- subscraping.Result {Source : s .Name (), Type : subscraping .Error , Error : err }
81+ s .errors ++
82+ session .DiscardHTTPResponse (resp )
83+ return
84+ }
7785 session .DiscardHTTPResponse (resp )
78- return
79- }
80- session .DiscardHTTPResponse (resp )
8186
82- if response .Code != 0 {
83- results <- subscraping.Result {
84- Source : s .Name (), Type : subscraping .Error , Error : fmt .Errorf ("%s" , response .Message ),
87+ if response .Code != 0 {
88+ results <- subscraping.Result {
89+ Source : s .Name (), Type : subscraping .Error , Error : fmt .Errorf ("%s" , response .Message ),
90+ }
91+ s .errors ++
92+ return
93+ }
94+
95+ if totalResults == - 1 {
96+ totalResults = response .Meta .Pagination .Total
8597 }
86- s .errors ++
87- return
88- }
8998
90- if response .Meta .Pagination .Total > 0 {
9199 for _ , quakeDomain := range response .Data {
92100 subdomain := quakeDomain .Service .HTTP .Host
93101 if strings .ContainsAny (subdomain , "暂无权限" ) {
94- subdomain = ""
102+ continue
95103 }
96104 results <- subscraping.Result {Source : s .Name (), Type : subscraping .Subdomain , Value : subdomain }
97105 s .results ++
98106 }
107+
108+ if len (response .Data ) == 0 || start + pageSize >= totalResults {
109+ break
110+ }
111+
112+ start += pageSize
99113 }
100114 }()
101115
0 commit comments