http_crawler 0.3.1.31 → 0.3.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b132210027bb986c3b36ca50855a159cf3279afb497532a0357b01dc14770ea
4
- data.tar.gz: 7ed408eb7fe85c1cdb2647ff74cc6f97ebd101da1f7c66562aaf6236a1245289
3
+ metadata.gz: 539321e3e69747e02ae880742809d04f5f7ef87bcf878f05092ab23145ecde28
4
+ data.tar.gz: d6587f26299e869d5b604487f4cc5302fb1bc044fd29ba3d723045f40824c5bd
5
5
  SHA512:
6
- metadata.gz: bfcb96c28ee2dc95ce5f9559aa7dafb17687819522f17f042f8d31025302ccac3a23d427912b159b74e861ca0fb7ca17ad14dec089c218acaf6d78415627b64b
7
- data.tar.gz: b6a2bd5b3e0336a571c172be9de653f64035912a8d53a19e445b89b4c6f7ffe579290c4f951b94d56dc2de6fe8750489c7d292c3ad867e8f0f4a2b78a3c28ca2
6
+ metadata.gz: f0356c38ec7e6c0e6e901a77ceacce783219b784c748447807c6e6b6a5488379453e515722e6f991983acef80009d009f1d51f6000f771c9edd96d28d620dd9d
7
+ data.tar.gz: 5f0d045e1b4dba21941897cc57e6727fdcb942208abe7158fc0324512cd3a2ba90c1b160c0879c8d072cc80cf114a39f1e295f852145cb721be211cbc6984ac7
@@ -113,14 +113,28 @@ module HttpCrawler
113
113
  attr_accessor :redirect
114
114
 
115
115
  attr_accessor :header
116
- # 头文件相关方法
117
- def header(parameter = {})
118
- parameter = parameter.symbolize_keys
116
+ # 创建时间: 2019/9/16 17:11
117
+ # 更新时间: 2019/9/16
118
+ # 作者: Jagger
119
+ # 方法名称: header
120
+ # 方法说明: 返回头文件
121
+ # 调用方式: #header
122
+ #
123
+ # @return
124
+ def header
119
125
  @header ||= init_header
120
126
  end
121
127
 
122
- def init_header(parameter = {})
123
- parameter = parameter.symbolize_keys
128
+ # 创建时间: 2019/9/16 17:08
129
+ # 更新时间: 2019/9/16
130
+ # 作者: Jagger
131
+ # 方法名称: init_header
132
+ # 方法说明: 初始化头文件
133
+ # 调用方式: #init_header
134
+ #
135
+ # @return
136
+ #
137
+ def init_header
124
138
  @header = {
125
139
  "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
126
140
  "Accept-Encoding": "gzip, br",
@@ -131,58 +145,164 @@ module HttpCrawler
131
145
  }
132
146
  end
133
147
 
148
+ # 创建时间: 2019/9/16 17:08
149
+ # 更新时间: 2019/9/16
150
+ # 作者: Jagger
151
+ # 方法名称: update_header
152
+ # 方法说明: 更新头文件,局部更新
153
+ # 调用方式: #update_header
154
+ #
155
+ # @return
156
+ #
134
157
  def update_header(parameter = {})
135
- parameter = parameter.symbolize_keys
136
- @header = init_header
158
+ @header = @header.merge(parameter.symbolize_keys)
137
159
  end
138
160
 
161
+ # 创建时间: 2019/9/16 17:10
162
+ # 更新时间: 2019/9/16
163
+ # 作者: Jagger
164
+ # 方法名称: replace_header
165
+ # 方法说明: 替换头文件
166
+ # 调用方式: #replace_header
167
+ #
168
+ # @option parameter [Hash] Hash模式传参
169
+ # @param parameter [Hash]
170
+ # {
171
+ # "": , # 参数说明
172
+ # }
173
+ #
174
+ # @return
175
+ #
176
+ def replace_header(parameter = {})
177
+ @header = parameter.symbolize_keys
178
+ end
179
+
180
+
139
181
  attr_accessor :cookies
140
- # cookies相关方法
141
- def cookies(parameter = {})
142
- parameter = parameter.symbolize_keys
143
- @cookies ||= HTTP::CookieJar.new
182
+ # 创建时间: 2019/9/16 17:12
183
+ # 更新时间: 2019/9/16
184
+ # 作者: Jagger
185
+ # 方法名称: cookies
186
+ # 方法说明: 返回头文件
187
+ # 调用方式: #cookies
188
+ #
189
+ # @return
190
+ #
191
+ def cookies
192
+ @cookies ||= init_cookies
144
193
  end
145
194
 
146
- def init_cookies(parameter = {})
147
- parameter = parameter.symbolize_keys
195
+ # 创建时间: 2019/9/16 17:13
196
+ # 更新时间: 2019/9/16
197
+ # 作者: Jagger
198
+ # 方法名称: init_cookies
199
+ # 方法说明: 初始化头文件
200
+ # 调用方式: #init_cookies
201
+ #
202
+ # @return
203
+ #
204
+ def init_cookies
148
205
  @cookies = {}
149
206
  end
150
207
 
208
+ # 创建时间: 2019/9/16 17:13
209
+ # 更新时间: 2019/9/16
210
+ # 作者: Jagger
211
+ # 方法名称: update_cookies
212
+ # 方法说明: 更新cookies,局部替换
213
+ # 调用方式: #update_cookies
214
+ #
215
+ # @option parameter [Hash] Hash模式传参
216
+ # @param parameter [Hash]
217
+ # {
218
+ # "": , # 参数说明
219
+ # }
220
+ #
221
+ # @return
222
+ #
151
223
  def update_cookies(parameter = {})
152
- parameter = parameter.symbolize_keys
224
+ case parameter
225
+ when String
226
+ hash = {}
227
+ parameter.scan(/([^=]*)=([^;]*);? ?/) do |m|
228
+ hash[:"#{m[0]}"] = m[1]
229
+ end
230
+ @cookies = @cookies.merge(hash.symbolize_keys)
231
+ when Hash
232
+ @cookies = @cookies.merge(parameter.symbolize_keys)
233
+ else
234
+ raise "cookies传入格式错误"
235
+ end
236
+ @cookies
237
+ end
153
238
 
239
+ # 创建时间: 2019/9/16 17:20
240
+ # 更新时间: 2019/9/16
241
+ # 作者: Jagger
242
+ # 方法名称: inheritance_cookies
243
+ # 方法说明: 继承上一个请求的set-cookies
244
+ # 调用方式: #inheritance_cookies
245
+ #
246
+ # @return
247
+ #
248
+ def inheritance_cookies
154
249
  @response.cookies.each do |cookie|
155
- @cookies.add(cookie)
250
+ @cookies[:"#{cookie.name}"] = cookie.value
156
251
  end unless @response.blank?
157
-
158
- nil
252
+ @cookies
159
253
  end
160
254
 
161
- # 字符串转换成cookies
162
- # "abc=123; cd=412" => { "abc": "123", "cd": "412"}
163
- def str_to_cookies(str)
164
- str.scan(/([^=]*)=([^;]*);? ?/) do |m|
165
- self.cookies[:"#{m[0]}"] = m[1]
166
- end
167
- end
168
-
169
- # 代理设置
255
+ # 创建时间: 2019/9/16 17:19
256
+ # 更新时间: 2019/9/16
257
+ # 作者: Jagger
258
+ # 方法名称: auto_proxy=
259
+ # 方法说明: 自动更新代理设置
260
+ # 调用方式: #auto_proxy=
261
+ #
262
+ # @return
263
+ #
170
264
  def auto_proxy=(value)
171
265
  Rails.logger.debug "自动更新代理"
172
266
  @auto_proxy = value
173
267
  update_proxy if (value == true && @proxy.blank?)
174
268
  end
175
269
 
176
- # 代理使用的api方法名
270
+ # 创建时间: 2019/9/16 17:23
271
+ # 更新时间: 2019/9/16
272
+ # 作者: Jagger
273
+ # 方法名称: proxy_api
274
+ # 方法说明: 代理使用的api方法名
275
+ # 调用方式: #proxy_api
276
+ #
277
+ # @return
278
+ #
177
279
  def proxy_api
178
280
  @proxy_api ||= "my"
179
281
  end
180
282
 
181
- # 调用代理 api使用的参数
283
+ # 创建时间: 2019/9/16 17:24
284
+ # 更新时间: 2019/9/16
285
+ # 作者: Jagger
286
+ # 方法名称: proxy_params
287
+ # 方法说明: 调用代理 api使用的参数
288
+ # 调用方式: #proxy_params
289
+ #
290
+ # @return
182
291
  def proxy_params
183
292
  @proxy_params ||= {key: "default"}
184
293
  end
185
294
 
295
+ # 创建时间: 2019/9/16 17:24
296
+ # 更新时间: 2019/9/16
297
+ # 作者: Jagger
298
+ # 方法名称: update_proxy
299
+ # 方法说明: 更新代理,如果未传入代理则自动获取代理
300
+ # 调用方式: #update_proxy
301
+ #
302
+ # @option proxy [Hash] Hash模式传参
303
+ # @param proxy [Hash]
304
+ #
305
+ # @return
186
306
  def update_proxy(proxy = {})
187
307
  proxy = proxy.symbolize_keys
188
308
  if (proxy.blank?)
@@ -194,7 +314,14 @@ module HttpCrawler
194
314
  end
195
315
 
196
316
 
197
- # 如果自动更新代理 则更新代理返回 true,否则返回false
317
+ # 创建时间: 2019/9/16 17:25
318
+ # 更新时间: 2019/9/16
319
+ # 作者: Jagger
320
+ # 方法名称: update_proxy?
321
+ # 方法说明: 是否自动更新代理,如果自动更新代理 则更新代理返回 true,否则返回false
322
+ # 调用方式: #update_proxy?
323
+ #
324
+ # @return
198
325
  def update_proxy?
199
326
  if @auto_proxy
200
327
  self.update_proxy
@@ -207,6 +334,15 @@ module HttpCrawler
207
334
 
208
335
  # 获取proxy
209
336
  # 通过调用 api 获取代理或者通过自定义设置代理
337
+ # 创建时间: 2019/9/16 17:26
338
+ # 更新时间: 2019/9/16
339
+ # 作者: Jagger
340
+ # 方法名称: get_proxy
341
+ # 方法说明: 获取proxy、通过调用 api 获取代理或者通过自定义设置代理
342
+ # 调用方式: #get_proxy
343
+ #
344
+ # @return
345
+ #
210
346
  def get_proxy
211
347
  proxy_ip = nil
212
348
  begin
@@ -252,16 +388,17 @@ module HttpCrawler
252
388
  nil
253
389
  end
254
390
 
255
- # 创建时间: 2019/9/11 17:11
256
- # 更新时间: 2019/9/11
391
+ # 初始化http请求前置条件
392
+ # 创建时间: 2019/9/16 17:27
393
+ # 更新时间: 2019/9/16
257
394
  # 作者: Jagger
258
- # 方法名称: init_http
259
- # 方法说明: 初始化http请求前置条件
260
- # 调用方式: #init_http
395
+ # 方法名称: http
396
+ # 方法说明: 创建Http的对象,用于发送请求
397
+ # 调用方式: #http
261
398
  #
262
399
  # @return HTTP
263
- #
264
- def init_http
400
+ def http
401
+
265
402
  h = HTTP
266
403
  # 自动重定向。最大重定向次数 max_hops: 5
267
404
  h = h.follow(max_hops: 5) if self.redirect == true
@@ -287,13 +424,20 @@ module HttpCrawler
287
424
  h
288
425
  end
289
426
 
290
- # 初始化http请求前置条件
291
- def http
292
- init_http
293
- end
294
-
295
427
 
296
- # 发送 get 请求
428
+ # 创建时间: 2019/9/16 17:27
429
+ # 更新时间: 2019/9/16
430
+ # 作者: Jagger
431
+ # 方法名称: get
432
+ # 方法说明: 发送get请求
433
+ # 调用方式: #get
434
+ #
435
+ # @param path [String] uri路由地址
436
+ # @param params [Hash] get参数
437
+ # @param limit [Integer] 错误递归次数
438
+ #
439
+ # @return
440
+ #
297
441
  def get(path, params = {}, limit = 3)
298
442
  raise "Client uri为空" unless self.uri
299
443
  request do
@@ -306,13 +450,32 @@ module HttpCrawler
306
450
  end
307
451
  end
308
452
 
309
- # 直接发送uri的get请求
453
+ # 创建时间: 2019/9/16 17:29
454
+ # 更新时间: 2019/9/16
455
+ # 作者: Jagger
456
+ # 方法名称: get_uri
457
+ # 方法说明: 直接发送uri的get请求
458
+ # 调用方式: #get_uri
459
+ #
460
+ # @return
310
461
  def get_uri
311
462
  raise "Client uri为空" unless self.uri
312
463
  request {http.get(self.uri.to_s, :ssl_context => @ctx)}
313
464
  end
314
465
 
315
466
  # 发送 post 请求
467
+ # 创建时间: 2019/9/16 17:29
468
+ # 更新时间: 2019/9/16
469
+ # 作者: Jagger
470
+ # 方法名称: post
471
+ # 方法说明: 发送 post 请求
472
+ # 调用方式: #post
473
+ #
474
+ # @param path [String] uri路由地址
475
+ # @param params [Hash] get参数
476
+ # @param format [] 请求参数的模式::params、:form、:body、:json、:form。
477
+ #
478
+ # @return
316
479
  def post(path, params = {}, format = :form)
317
480
  raise "Client uri为空" unless self.uri
318
481
  request {http.post((self.uri + path).to_s, format => params, :ssl_context => @ctx)}
@@ -323,6 +486,16 @@ module HttpCrawler
323
486
  protected :response=
324
487
 
325
488
  # 出现如果验证码,切换代理
489
+ # 创建时间: 2019/9/16 17:31
490
+ # 更新时间: 2019/9/16
491
+ # 作者: Jagger
492
+ # 方法名称: validation_to_proxy?
493
+ # 方法说明: 验证是否出现验证码,出现如果验证码,切换代理
494
+ # 调用方式: #validation_to_proxy?
495
+ #
496
+ # @param r 默认为本身的 @response
497
+ #
498
+ # @return
326
499
  def validation_to_proxy?(r = response)
327
500
  # 判断是否出现验证码
328
501
  if r.validation_page?
@@ -338,7 +511,15 @@ module HttpCrawler
338
511
  protected
339
512
 
340
513
 
341
- # 发送请求
514
+ # 创建时间: 2019/9/16 18:01
515
+ # 更新时间: 2019/9/16
516
+ # 作者: Jagger
517
+ # 方法名称: request
518
+ # 方法说明: 发送请求,所有请求都会走该方法
519
+ # 调用方式: #request
520
+ #
521
+ # @return
522
+ #
342
523
  def request(&block)
343
524
  raise "必须定义块" unless block_given?
344
525
  n = max_error_num
@@ -1,3 +1,3 @@
1
1
  module HttpCrawler
2
- VERSION = "0.3.1.31"
2
+ VERSION = "0.3.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_crawler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1.31
4
+ version: 0.3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - jagger
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-12 00:00:00.000000000 Z
11
+ date: 2019-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec