http_crawler 0.3.1.31 → 0.3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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