mechanize 2.7.7 → 2.8.3
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 +4 -4
- data/.github/dependabot.yml +11 -0
- data/.github/workflows/ci-test.yml +36 -8
- data/.yardopts +8 -0
- data/{CHANGELOG.rdoc → CHANGELOG.md} +117 -88
- data/Gemfile +1 -6
- data/{LICENSE.rdoc → LICENSE.txt} +4 -0
- data/README.md +77 -0
- data/Rakefile +18 -3
- data/lib/mechanize/chunked_termination_error.rb +1 -0
- data/lib/mechanize/content_type_error.rb +1 -0
- data/lib/mechanize/cookie.rb +1 -13
- data/lib/mechanize/cookie_jar.rb +2 -10
- data/lib/mechanize/directory_saver.rb +1 -0
- data/lib/mechanize/download.rb +1 -0
- data/lib/mechanize/element_matcher.rb +1 -0
- data/lib/mechanize/element_not_found_error.rb +1 -0
- data/lib/mechanize/file.rb +1 -0
- data/lib/mechanize/file_connection.rb +5 -3
- data/lib/mechanize/file_request.rb +1 -0
- data/lib/mechanize/file_response.rb +3 -0
- data/lib/mechanize/file_saver.rb +1 -0
- data/lib/mechanize/form/button.rb +1 -0
- data/lib/mechanize/form/check_box.rb +1 -0
- data/lib/mechanize/form/field.rb +1 -0
- data/lib/mechanize/form/file_upload.rb +1 -0
- data/lib/mechanize/form/hidden.rb +1 -0
- data/lib/mechanize/form/image_button.rb +1 -0
- data/lib/mechanize/form/keygen.rb +1 -0
- data/lib/mechanize/form/multi_select_list.rb +1 -0
- data/lib/mechanize/form/option.rb +1 -0
- data/lib/mechanize/form/radio_button.rb +1 -0
- data/lib/mechanize/form/reset.rb +1 -0
- data/lib/mechanize/form/select_list.rb +1 -0
- data/lib/mechanize/form/submit.rb +1 -0
- data/lib/mechanize/form/text.rb +1 -0
- data/lib/mechanize/form/textarea.rb +1 -0
- data/lib/mechanize/form.rb +1 -9
- data/lib/mechanize/headers.rb +1 -0
- data/lib/mechanize/history.rb +1 -0
- data/lib/mechanize/http/agent.rb +16 -8
- data/lib/mechanize/http/auth_challenge.rb +1 -0
- data/lib/mechanize/http/auth_realm.rb +1 -0
- data/lib/mechanize/http/auth_store.rb +1 -0
- data/lib/mechanize/http/content_disposition_parser.rb +14 -2
- data/lib/mechanize/http/www_authenticate_parser.rb +3 -3
- data/lib/mechanize/http.rb +1 -0
- data/lib/mechanize/image.rb +1 -0
- data/lib/mechanize/page/base.rb +1 -0
- data/lib/mechanize/page/frame.rb +1 -0
- data/lib/mechanize/page/image.rb +1 -0
- data/lib/mechanize/page/label.rb +1 -0
- data/lib/mechanize/page/link.rb +8 -1
- data/lib/mechanize/page/meta_refresh.rb +1 -0
- data/lib/mechanize/page.rb +4 -3
- data/lib/mechanize/parser.rb +1 -0
- data/lib/mechanize/pluggable_parsers.rb +1 -0
- data/lib/mechanize/prependable.rb +1 -0
- data/lib/mechanize/redirect_limit_reached_error.rb +1 -0
- data/lib/mechanize/redirect_not_get_or_head_error.rb +1 -0
- data/lib/mechanize/response_code_error.rb +2 -1
- data/lib/mechanize/response_read_error.rb +1 -0
- data/lib/mechanize/robots_disallowed_error.rb +1 -0
- data/lib/mechanize/test_case/bad_chunking_servlet.rb +1 -0
- data/lib/mechanize/test_case/basic_auth_servlet.rb +1 -0
- data/lib/mechanize/test_case/content_type_servlet.rb +1 -0
- data/lib/mechanize/test_case/digest_auth_servlet.rb +1 -0
- data/lib/mechanize/test_case/file_upload_servlet.rb +1 -0
- data/lib/mechanize/test_case/form_servlet.rb +1 -0
- data/lib/mechanize/test_case/gzip_servlet.rb +1 -0
- data/lib/mechanize/test_case/header_servlet.rb +1 -0
- data/lib/mechanize/test_case/http_refresh_servlet.rb +1 -0
- data/lib/mechanize/test_case/infinite_redirect_servlet.rb +1 -0
- data/lib/mechanize/test_case/infinite_refresh_servlet.rb +1 -0
- data/lib/mechanize/test_case/many_cookies_as_string_servlet.rb +1 -0
- data/lib/mechanize/test_case/many_cookies_servlet.rb +1 -0
- data/lib/mechanize/test_case/modified_since_servlet.rb +1 -0
- data/lib/mechanize/test_case/ntlm_servlet.rb +1 -0
- data/lib/mechanize/test_case/one_cookie_no_spaces_servlet.rb +1 -0
- data/lib/mechanize/test_case/one_cookie_servlet.rb +1 -0
- data/lib/mechanize/test_case/quoted_value_cookie_servlet.rb +1 -0
- data/lib/mechanize/test_case/redirect_servlet.rb +1 -0
- data/lib/mechanize/test_case/referer_servlet.rb +1 -0
- data/lib/mechanize/test_case/refresh_with_empty_url.rb +1 -0
- data/lib/mechanize/test_case/refresh_without_url.rb +1 -0
- data/lib/mechanize/test_case/response_code_servlet.rb +1 -0
- data/lib/mechanize/test_case/robots_txt_servlet.rb +1 -0
- data/lib/mechanize/test_case/send_cookies_servlet.rb +1 -0
- data/lib/mechanize/test_case/server.rb +1 -0
- data/lib/mechanize/test_case/servlets.rb +1 -0
- data/lib/mechanize/test_case/verb_servlet.rb +1 -0
- data/lib/mechanize/test_case.rb +32 -27
- data/lib/mechanize/unauthorized_error.rb +1 -0
- data/lib/mechanize/unsupported_scheme_error.rb +1 -0
- data/lib/mechanize/util.rb +2 -1
- data/lib/mechanize/version.rb +2 -1
- data/lib/mechanize/xml_file.rb +1 -0
- data/lib/mechanize.rb +2 -1
- data/mechanize.gemspec +48 -34
- data/test/htdocs/dir with spaces/foo.html +1 -0
- data/test/test_mechanize.rb +5 -4
- data/test/test_mechanize_cookie_jar.rb +2 -0
- data/test/test_mechanize_download.rb +1 -0
- data/test/test_mechanize_file.rb +1 -0
- data/test/test_mechanize_file_connection.rb +21 -3
- data/test/test_mechanize_file_response.rb +6 -0
- data/test/test_mechanize_http_agent.rb +47 -7
- data/test/test_mechanize_http_content_disposition_parser.rb +27 -0
- data/test/test_mechanize_link.rb +24 -0
- data/test/test_mechanize_page_encoding.rb +28 -1
- metadata +145 -56
- data/README.rdoc +0 -77
|
@@ -16,11 +16,7 @@ class TestMechanizeHttpAgent < Mechanize::TestCase
|
|
|
16
16
|
@res.instance_variable_set :@code, 200
|
|
17
17
|
@res.instance_variable_set :@header, {}
|
|
18
18
|
|
|
19
|
-
@headers =
|
|
20
|
-
%w[accept accept-encoding user-agent]
|
|
21
|
-
else
|
|
22
|
-
%w[accept user-agent]
|
|
23
|
-
end
|
|
19
|
+
@headers = %w[accept accept-encoding user-agent]
|
|
24
20
|
end
|
|
25
21
|
|
|
26
22
|
def auth_realm uri, scheme, type
|
|
@@ -205,7 +201,7 @@ class TestMechanizeHttpAgent < Mechanize::TestCase
|
|
|
205
201
|
|
|
206
202
|
page = @agent.fetch uri
|
|
207
203
|
|
|
208
|
-
assert_equal File.read(foo), page.body
|
|
204
|
+
assert_equal File.read(foo), page.body.gsub(/\r\n/, "\n")
|
|
209
205
|
assert_kind_of Mechanize::Page, page
|
|
210
206
|
end
|
|
211
207
|
|
|
@@ -1508,7 +1504,8 @@ class TestMechanizeHttpAgent < Mechanize::TestCase
|
|
|
1508
1504
|
headers = {
|
|
1509
1505
|
'Range' => 'bytes=0-9999',
|
|
1510
1506
|
'Content-Type' => 'application/x-www-form-urlencoded',
|
|
1511
|
-
'
|
|
1507
|
+
'CONTENT-LENGTH' => '9999',
|
|
1508
|
+
'content-md5' => '14758f1afd44c09b7992073ccf00b43d',
|
|
1512
1509
|
}
|
|
1513
1510
|
|
|
1514
1511
|
page = fake_page
|
|
@@ -1520,6 +1517,7 @@ class TestMechanizeHttpAgent < Mechanize::TestCase
|
|
|
1520
1517
|
assert_match 'range|bytes=0-9999', page.body
|
|
1521
1518
|
refute_match 'content-type|application/x-www-form-urlencoded', page.body
|
|
1522
1519
|
refute_match 'content-length|9999', page.body
|
|
1520
|
+
refute_match 'content-md5|14758f1afd44c09b7992073ccf00b43d', page.body
|
|
1523
1521
|
end
|
|
1524
1522
|
|
|
1525
1523
|
def test_response_redirect_malformed
|
|
@@ -1555,6 +1553,48 @@ class TestMechanizeHttpAgent < Mechanize::TestCase
|
|
|
1555
1553
|
end
|
|
1556
1554
|
end
|
|
1557
1555
|
|
|
1556
|
+
def test_response_redirect_to_cross_site_with_credential
|
|
1557
|
+
@agent.redirect_ok = true
|
|
1558
|
+
|
|
1559
|
+
headers = {
|
|
1560
|
+
'Range' => 'bytes=0-9999',
|
|
1561
|
+
'AUTHORIZATION' => 'Basic xxx',
|
|
1562
|
+
'cookie' => 'name=value',
|
|
1563
|
+
}
|
|
1564
|
+
|
|
1565
|
+
page = html_page ''
|
|
1566
|
+
page = @agent.response_redirect({ 'Location' => 'http://trap/http_headers' }, :get,
|
|
1567
|
+
page, 0, headers)
|
|
1568
|
+
|
|
1569
|
+
refute_includes(headers.keys, "AUTHORIZATION")
|
|
1570
|
+
refute_includes(headers.keys, "cookie")
|
|
1571
|
+
|
|
1572
|
+
assert_match 'range|bytes=0-9999', page.body
|
|
1573
|
+
refute_match("authorization|Basic xxx", page.body)
|
|
1574
|
+
refute_match("cookie|name=value", page.body)
|
|
1575
|
+
end
|
|
1576
|
+
|
|
1577
|
+
def test_response_redirect_to_same_site_with_credential
|
|
1578
|
+
@agent.redirect_ok = true
|
|
1579
|
+
|
|
1580
|
+
headers = {
|
|
1581
|
+
'Range' => 'bytes=0-9999',
|
|
1582
|
+
'AUTHORIZATION' => 'Basic xxx',
|
|
1583
|
+
'cookie' => 'name=value',
|
|
1584
|
+
}
|
|
1585
|
+
|
|
1586
|
+
page = html_page ''
|
|
1587
|
+
page = @agent.response_redirect({ 'Location' => '/http_headers' }, :get,
|
|
1588
|
+
page, 0, headers)
|
|
1589
|
+
|
|
1590
|
+
assert_includes(headers.keys, "AUTHORIZATION")
|
|
1591
|
+
assert_includes(headers.keys, "cookie")
|
|
1592
|
+
|
|
1593
|
+
assert_match 'range|bytes=0-9999', page.body
|
|
1594
|
+
assert_match("authorization|Basic xxx", page.body)
|
|
1595
|
+
assert_match("cookie|name=value", page.body)
|
|
1596
|
+
end
|
|
1597
|
+
|
|
1558
1598
|
def test_response_redirect_not_ok
|
|
1559
1599
|
@agent.redirect_ok = false
|
|
1560
1600
|
|
|
@@ -30,6 +30,33 @@ class TestMechanizeHttpContentDispositionParser < Mechanize::TestCase
|
|
|
30
30
|
assert_equal expected, content_disposition.parameters
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
+
def test_parse_date_iso8601_fallback
|
|
34
|
+
now = Time.at Time.now.to_i
|
|
35
|
+
|
|
36
|
+
content_disposition = @parser.parse \
|
|
37
|
+
'attachment;' \
|
|
38
|
+
'filename=value;' \
|
|
39
|
+
"creation-date=\"#{now.iso8601}\";" \
|
|
40
|
+
"modification-date=\"#{(now + 1).iso8601}\""
|
|
41
|
+
|
|
42
|
+
assert_equal 'attachment', content_disposition.type
|
|
43
|
+
assert_equal 'value', content_disposition.filename
|
|
44
|
+
assert_equal now, content_disposition.creation_date
|
|
45
|
+
assert_equal((now + 1), content_disposition.modification_date)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_parse_date_invalid
|
|
49
|
+
now = Time.at Time.now.to_i
|
|
50
|
+
|
|
51
|
+
content_disposition = @parser.parse \
|
|
52
|
+
'attachment;' \
|
|
53
|
+
'filename=value;' \
|
|
54
|
+
"creation-date=\"#{now.to_s}\";" \
|
|
55
|
+
"modification-date=\"#{(now + 1).to_s}\""
|
|
56
|
+
|
|
57
|
+
assert_nil content_disposition
|
|
58
|
+
end
|
|
59
|
+
|
|
33
60
|
def test_parse_header
|
|
34
61
|
content_disposition = @parser.parse \
|
|
35
62
|
'content-disposition: attachment;filename=value', true
|
data/test/test_mechanize_link.rb
CHANGED
|
@@ -135,6 +135,30 @@ class TestMechanizeLink < Mechanize::TestCase
|
|
|
135
135
|
assert_equal 'http://foo.bar/%20baz', link.uri.to_s
|
|
136
136
|
end
|
|
137
137
|
|
|
138
|
+
def test_uri_weird_with_fragment
|
|
139
|
+
doc = Nokogiri::HTML::Document.new
|
|
140
|
+
|
|
141
|
+
node = Nokogiri::XML::Node.new('foo', doc)
|
|
142
|
+
node['href'] = 'http://foo.bar/ baz#уважение'
|
|
143
|
+
|
|
144
|
+
link = Mechanize::Page::Link.new(node, nil, nil)
|
|
145
|
+
|
|
146
|
+
assert_equal '%D1%83%D0%B2%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5', link.uri.fragment
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def test_bad_uri_raise_compatible_exception
|
|
150
|
+
doc = Nokogiri::HTML::Document.new
|
|
151
|
+
|
|
152
|
+
node = Nokogiri::XML::Node.new('foo', doc)
|
|
153
|
+
node['href'] = 'http://http:foo.bar/ baz'
|
|
154
|
+
|
|
155
|
+
link = Mechanize::Page::Link.new(node, nil, nil)
|
|
156
|
+
|
|
157
|
+
assert_raises URI::InvalidURIError do
|
|
158
|
+
link.uri
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
138
162
|
def test_resolving_full_uri
|
|
139
163
|
page = @mech.get("http://localhost/frame_test.html")
|
|
140
164
|
link = page.link_with(:text => "Form Test")
|
|
@@ -183,5 +183,32 @@ class TestMechanizePageEncoding < Mechanize::TestCase
|
|
|
183
183
|
assert_equal Encoding::UTF_8, result.text.encoding
|
|
184
184
|
end
|
|
185
185
|
|
|
186
|
-
|
|
186
|
+
def test_parser_error_message_containing_encoding_errors
|
|
187
|
+
skip if RUBY_ENGINE == 'jruby' # this is a libxml2-specific condition
|
|
188
|
+
|
|
189
|
+
# https://github.com/sparklemotion/mechanize/issues/553
|
|
190
|
+
body = <<~EOF
|
|
191
|
+
<html>
|
|
192
|
+
<body>
|
|
193
|
+
<!--
|
|
194
|
+
## メモ
|
|
195
|
+
処理の一般化, 二重ループ, 多重ループ
|
|
196
|
+
wzxhzdk:25
|
|
197
|
+
-->
|
|
198
|
+
EOF
|
|
199
|
+
page = util_page body
|
|
200
|
+
|
|
201
|
+
# this should not raise an "invalid byte sequence in UTF-8" error while processing parsing errors
|
|
202
|
+
page.search("body")
|
|
187
203
|
|
|
204
|
+
# let's assert on the setup: a libxml2-returned parsing error itself contains an invalid character
|
|
205
|
+
# note that this problem only appears in libxml <= 2.9.10
|
|
206
|
+
error = page.parser.errors.find { |e| e.message.include?("Comment not terminated") }
|
|
207
|
+
if error
|
|
208
|
+
exception = assert_raises(ArgumentError) do
|
|
209
|
+
error.message =~ /any regex just to trigger encoding error/
|
|
210
|
+
end
|
|
211
|
+
assert_includes(exception.message, "invalid byte sequence in UTF-8")
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mechanize
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.8.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Eric Hodel
|
|
@@ -12,144 +12,156 @@ authors:
|
|
|
12
12
|
autorequire:
|
|
13
13
|
bindir: bin
|
|
14
14
|
cert_chain: []
|
|
15
|
-
date: 2021-
|
|
15
|
+
date: 2021-11-11 00:00:00.000000000 Z
|
|
16
16
|
dependencies:
|
|
17
17
|
- !ruby/object:Gem::Dependency
|
|
18
|
-
name:
|
|
18
|
+
name: addressable
|
|
19
19
|
requirement: !ruby/object:Gem::Requirement
|
|
20
20
|
requirements:
|
|
21
|
-
- - ">="
|
|
22
|
-
- !ruby/object:Gem::Version
|
|
23
|
-
version: 1.1.1
|
|
24
21
|
- - "~>"
|
|
25
22
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
23
|
+
version: '2.8'
|
|
27
24
|
type: :runtime
|
|
28
25
|
prerelease: false
|
|
29
26
|
version_requirements: !ruby/object:Gem::Requirement
|
|
30
27
|
requirements:
|
|
31
|
-
- - ">="
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: 1.1.1
|
|
34
28
|
- - "~>"
|
|
35
29
|
- !ruby/object:Gem::Version
|
|
36
|
-
version: '
|
|
30
|
+
version: '2.8'
|
|
37
31
|
- !ruby/object:Gem::Dependency
|
|
38
|
-
name:
|
|
32
|
+
name: domain_name
|
|
39
33
|
requirement: !ruby/object:Gem::Requirement
|
|
40
34
|
requirements:
|
|
41
35
|
- - ">="
|
|
42
36
|
- !ruby/object:Gem::Version
|
|
43
|
-
version:
|
|
37
|
+
version: 0.5.20190701
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0.5'
|
|
44
41
|
type: :runtime
|
|
45
42
|
prerelease: false
|
|
46
43
|
version_requirements: !ruby/object:Gem::Requirement
|
|
47
44
|
requirements:
|
|
48
45
|
- - ">="
|
|
49
46
|
- !ruby/object:Gem::Version
|
|
50
|
-
version:
|
|
47
|
+
version: 0.5.20190701
|
|
48
|
+
- - "~>"
|
|
49
|
+
- !ruby/object:Gem::Version
|
|
50
|
+
version: '0.5'
|
|
51
51
|
- !ruby/object:Gem::Dependency
|
|
52
|
-
name:
|
|
52
|
+
name: http-cookie
|
|
53
53
|
requirement: !ruby/object:Gem::Requirement
|
|
54
54
|
requirements:
|
|
55
55
|
- - ">="
|
|
56
56
|
- !ruby/object:Gem::Version
|
|
57
|
-
version:
|
|
57
|
+
version: 1.0.3
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '1.0'
|
|
58
61
|
type: :runtime
|
|
59
62
|
prerelease: false
|
|
60
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
61
64
|
requirements:
|
|
62
65
|
- - ">="
|
|
63
66
|
- !ruby/object:Gem::Version
|
|
64
|
-
version:
|
|
67
|
+
version: 1.0.3
|
|
68
|
+
- - "~>"
|
|
69
|
+
- !ruby/object:Gem::Version
|
|
70
|
+
version: '1.0'
|
|
65
71
|
- !ruby/object:Gem::Dependency
|
|
66
|
-
name:
|
|
72
|
+
name: mime-types
|
|
67
73
|
requirement: !ruby/object:Gem::Requirement
|
|
68
74
|
requirements:
|
|
69
75
|
- - "~>"
|
|
70
76
|
- !ruby/object:Gem::Version
|
|
71
|
-
version: '
|
|
77
|
+
version: '3.0'
|
|
72
78
|
type: :runtime
|
|
73
79
|
prerelease: false
|
|
74
80
|
version_requirements: !ruby/object:Gem::Requirement
|
|
75
81
|
requirements:
|
|
76
82
|
- - "~>"
|
|
77
83
|
- !ruby/object:Gem::Version
|
|
78
|
-
version: '
|
|
84
|
+
version: '3.0'
|
|
79
85
|
- !ruby/object:Gem::Dependency
|
|
80
|
-
name:
|
|
86
|
+
name: net-http-digest_auth
|
|
81
87
|
requirement: !ruby/object:Gem::Requirement
|
|
82
88
|
requirements:
|
|
89
|
+
- - ">="
|
|
90
|
+
- !ruby/object:Gem::Version
|
|
91
|
+
version: 1.4.1
|
|
83
92
|
- - "~>"
|
|
84
93
|
- !ruby/object:Gem::Version
|
|
85
|
-
version: '1.
|
|
94
|
+
version: '1.4'
|
|
86
95
|
type: :runtime
|
|
87
96
|
prerelease: false
|
|
88
97
|
version_requirements: !ruby/object:Gem::Requirement
|
|
89
98
|
requirements:
|
|
99
|
+
- - ">="
|
|
100
|
+
- !ruby/object:Gem::Version
|
|
101
|
+
version: 1.4.1
|
|
90
102
|
- - "~>"
|
|
91
103
|
- !ruby/object:Gem::Version
|
|
92
|
-
version: '1.
|
|
104
|
+
version: '1.4'
|
|
93
105
|
- !ruby/object:Gem::Dependency
|
|
94
|
-
name:
|
|
106
|
+
name: net-http-persistent
|
|
95
107
|
requirement: !ruby/object:Gem::Requirement
|
|
96
108
|
requirements:
|
|
97
109
|
- - ">="
|
|
98
110
|
- !ruby/object:Gem::Version
|
|
99
|
-
version:
|
|
100
|
-
- - "
|
|
111
|
+
version: 2.5.2
|
|
112
|
+
- - "<"
|
|
101
113
|
- !ruby/object:Gem::Version
|
|
102
|
-
version:
|
|
114
|
+
version: 5.0.dev
|
|
103
115
|
type: :runtime
|
|
104
116
|
prerelease: false
|
|
105
117
|
version_requirements: !ruby/object:Gem::Requirement
|
|
106
118
|
requirements:
|
|
107
119
|
- - ">="
|
|
108
120
|
- !ruby/object:Gem::Version
|
|
109
|
-
version:
|
|
110
|
-
- - "
|
|
121
|
+
version: 2.5.2
|
|
122
|
+
- - "<"
|
|
111
123
|
- !ruby/object:Gem::Version
|
|
112
|
-
version:
|
|
124
|
+
version: 5.0.dev
|
|
113
125
|
- !ruby/object:Gem::Dependency
|
|
114
|
-
name:
|
|
126
|
+
name: nokogiri
|
|
115
127
|
requirement: !ruby/object:Gem::Requirement
|
|
116
128
|
requirements:
|
|
117
|
-
- - "<"
|
|
118
|
-
- !ruby/object:Gem::Version
|
|
119
|
-
version: '0.2'
|
|
120
129
|
- - ">="
|
|
121
130
|
- !ruby/object:Gem::Version
|
|
122
|
-
version:
|
|
131
|
+
version: 1.11.2
|
|
132
|
+
- - "~>"
|
|
133
|
+
- !ruby/object:Gem::Version
|
|
134
|
+
version: '1.11'
|
|
123
135
|
type: :runtime
|
|
124
136
|
prerelease: false
|
|
125
137
|
version_requirements: !ruby/object:Gem::Requirement
|
|
126
138
|
requirements:
|
|
127
|
-
- - "<"
|
|
128
|
-
- !ruby/object:Gem::Version
|
|
129
|
-
version: '0.2'
|
|
130
139
|
- - ">="
|
|
131
140
|
- !ruby/object:Gem::Version
|
|
132
|
-
version:
|
|
141
|
+
version: 1.11.2
|
|
142
|
+
- - "~>"
|
|
143
|
+
- !ruby/object:Gem::Version
|
|
144
|
+
version: '1.11'
|
|
133
145
|
- !ruby/object:Gem::Dependency
|
|
134
|
-
name:
|
|
146
|
+
name: rubyntlm
|
|
135
147
|
requirement: !ruby/object:Gem::Requirement
|
|
136
148
|
requirements:
|
|
137
149
|
- - ">="
|
|
138
150
|
- !ruby/object:Gem::Version
|
|
139
|
-
version: 0.
|
|
151
|
+
version: 0.6.3
|
|
140
152
|
- - "~>"
|
|
141
153
|
- !ruby/object:Gem::Version
|
|
142
|
-
version: '0.
|
|
154
|
+
version: '0.6'
|
|
143
155
|
type: :runtime
|
|
144
156
|
prerelease: false
|
|
145
157
|
version_requirements: !ruby/object:Gem::Requirement
|
|
146
158
|
requirements:
|
|
147
159
|
- - ">="
|
|
148
160
|
- !ruby/object:Gem::Version
|
|
149
|
-
version: 0.
|
|
161
|
+
version: 0.6.3
|
|
150
162
|
- - "~>"
|
|
151
163
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: '0.
|
|
164
|
+
version: '0.6'
|
|
153
165
|
- !ruby/object:Gem::Dependency
|
|
154
166
|
name: webrick
|
|
155
167
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -164,6 +176,76 @@ dependencies:
|
|
|
164
176
|
- - "~>"
|
|
165
177
|
- !ruby/object:Gem::Version
|
|
166
178
|
version: '1.7'
|
|
179
|
+
- !ruby/object:Gem::Dependency
|
|
180
|
+
name: webrobots
|
|
181
|
+
requirement: !ruby/object:Gem::Requirement
|
|
182
|
+
requirements:
|
|
183
|
+
- - "~>"
|
|
184
|
+
- !ruby/object:Gem::Version
|
|
185
|
+
version: 0.1.2
|
|
186
|
+
type: :runtime
|
|
187
|
+
prerelease: false
|
|
188
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
189
|
+
requirements:
|
|
190
|
+
- - "~>"
|
|
191
|
+
- !ruby/object:Gem::Version
|
|
192
|
+
version: 0.1.2
|
|
193
|
+
- !ruby/object:Gem::Dependency
|
|
194
|
+
name: minitest
|
|
195
|
+
requirement: !ruby/object:Gem::Requirement
|
|
196
|
+
requirements:
|
|
197
|
+
- - "~>"
|
|
198
|
+
- !ruby/object:Gem::Version
|
|
199
|
+
version: '5.14'
|
|
200
|
+
type: :development
|
|
201
|
+
prerelease: false
|
|
202
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
203
|
+
requirements:
|
|
204
|
+
- - "~>"
|
|
205
|
+
- !ruby/object:Gem::Version
|
|
206
|
+
version: '5.14'
|
|
207
|
+
- !ruby/object:Gem::Dependency
|
|
208
|
+
name: rake
|
|
209
|
+
requirement: !ruby/object:Gem::Requirement
|
|
210
|
+
requirements:
|
|
211
|
+
- - "~>"
|
|
212
|
+
- !ruby/object:Gem::Version
|
|
213
|
+
version: '13.0'
|
|
214
|
+
type: :development
|
|
215
|
+
prerelease: false
|
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
217
|
+
requirements:
|
|
218
|
+
- - "~>"
|
|
219
|
+
- !ruby/object:Gem::Version
|
|
220
|
+
version: '13.0'
|
|
221
|
+
- !ruby/object:Gem::Dependency
|
|
222
|
+
name: rdoc
|
|
223
|
+
requirement: !ruby/object:Gem::Requirement
|
|
224
|
+
requirements:
|
|
225
|
+
- - "~>"
|
|
226
|
+
- !ruby/object:Gem::Version
|
|
227
|
+
version: '6.3'
|
|
228
|
+
type: :development
|
|
229
|
+
prerelease: false
|
|
230
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
231
|
+
requirements:
|
|
232
|
+
- - "~>"
|
|
233
|
+
- !ruby/object:Gem::Version
|
|
234
|
+
version: '6.3'
|
|
235
|
+
- !ruby/object:Gem::Dependency
|
|
236
|
+
name: rubocop
|
|
237
|
+
requirement: !ruby/object:Gem::Requirement
|
|
238
|
+
requirements:
|
|
239
|
+
- - "~>"
|
|
240
|
+
- !ruby/object:Gem::Version
|
|
241
|
+
version: '1.12'
|
|
242
|
+
type: :development
|
|
243
|
+
prerelease: false
|
|
244
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
245
|
+
requirements:
|
|
246
|
+
- - "~>"
|
|
247
|
+
- !ruby/object:Gem::Version
|
|
248
|
+
version: '1.12'
|
|
167
249
|
description: |-
|
|
168
250
|
The Mechanize library is used for automating interaction with websites.
|
|
169
251
|
Mechanize automatically stores and sends cookies, follows redirects,
|
|
@@ -179,21 +261,22 @@ email:
|
|
|
179
261
|
executables: []
|
|
180
262
|
extensions: []
|
|
181
263
|
extra_rdoc_files:
|
|
182
|
-
- GUIDE.rdoc
|
|
183
264
|
- EXAMPLES.rdoc
|
|
184
|
-
-
|
|
185
|
-
- CHANGELOG.
|
|
186
|
-
- README.
|
|
265
|
+
- GUIDE.rdoc
|
|
266
|
+
- CHANGELOG.md
|
|
267
|
+
- README.md
|
|
187
268
|
files:
|
|
188
269
|
- ".autotest"
|
|
270
|
+
- ".github/dependabot.yml"
|
|
189
271
|
- ".github/workflows/ci-test.yml"
|
|
190
272
|
- ".gitignore"
|
|
191
|
-
-
|
|
273
|
+
- ".yardopts"
|
|
274
|
+
- CHANGELOG.md
|
|
192
275
|
- EXAMPLES.rdoc
|
|
193
276
|
- GUIDE.rdoc
|
|
194
277
|
- Gemfile
|
|
195
|
-
- LICENSE.
|
|
196
|
-
- README.
|
|
278
|
+
- LICENSE.txt
|
|
279
|
+
- README.md
|
|
197
280
|
- Rakefile
|
|
198
281
|
- examples/flickr_upload.rb
|
|
199
282
|
- examples/mech-dump.rb
|
|
@@ -392,28 +475,34 @@ files:
|
|
|
392
475
|
- test/test_mechanize_util.rb
|
|
393
476
|
- test/test_mechanize_xml_file.rb
|
|
394
477
|
- test/test_multi_select.rb
|
|
395
|
-
homepage:
|
|
478
|
+
homepage: https://github.com/sparklemotion/mechanize
|
|
396
479
|
licenses:
|
|
397
480
|
- MIT
|
|
398
|
-
metadata:
|
|
481
|
+
metadata:
|
|
482
|
+
yard.run: yard
|
|
483
|
+
bug_tracker_uri: https://github.com/sparklemotion/mechanize/issues
|
|
484
|
+
changelog_uri: https://github.com/sparklemotion/mechanize/blob/main/CHANGELOG.md
|
|
485
|
+
documentation_uri: https://www.rubydoc.info/gems/mechanize
|
|
486
|
+
homepage_uri: https://github.com/sparklemotion/mechanize
|
|
487
|
+
source_code_uri: https://github.com/sparklemotion/mechanize
|
|
399
488
|
post_install_message:
|
|
400
489
|
rdoc_options:
|
|
401
490
|
- "--main"
|
|
402
|
-
- README.
|
|
491
|
+
- README.md
|
|
403
492
|
require_paths:
|
|
404
493
|
- lib
|
|
405
494
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
406
495
|
requirements:
|
|
407
496
|
- - ">="
|
|
408
497
|
- !ruby/object:Gem::Version
|
|
409
|
-
version:
|
|
498
|
+
version: 2.5.0
|
|
410
499
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
411
500
|
requirements:
|
|
412
501
|
- - ">="
|
|
413
502
|
- !ruby/object:Gem::Version
|
|
414
503
|
version: '0'
|
|
415
504
|
requirements: []
|
|
416
|
-
rubygems_version: 3.
|
|
505
|
+
rubygems_version: 3.2.22
|
|
417
506
|
signing_key:
|
|
418
507
|
specification_version: 4
|
|
419
508
|
summary: The Mechanize library is used for automating interaction with websites
|
data/README.rdoc
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
= Mechanize {<img src="https://secure.travis-ci.org/sparklemotion/mechanize.svg?rvm=2.3.3" />}[http://travis-ci.org/sparklemotion/mechanize]
|
|
2
|
-
|
|
3
|
-
* http://docs.seattlerb.org/mechanize
|
|
4
|
-
* https://github.com/sparklemotion/mechanize
|
|
5
|
-
|
|
6
|
-
== Description
|
|
7
|
-
|
|
8
|
-
The Mechanize library is used for automating interaction with websites.
|
|
9
|
-
Mechanize automatically stores and sends cookies, follows redirects,
|
|
10
|
-
and can follow links and submit forms. Form fields can be populated and
|
|
11
|
-
submitted. Mechanize also keeps track of the sites that you have visited as
|
|
12
|
-
a history.
|
|
13
|
-
|
|
14
|
-
== Dependencies
|
|
15
|
-
|
|
16
|
-
* ruby 1.9.2 or newer
|
|
17
|
-
* nokogiri[https://github.com/sparklemotion/nokogiri]
|
|
18
|
-
|
|
19
|
-
== Support:
|
|
20
|
-
|
|
21
|
-
The bug tracker is available here:
|
|
22
|
-
|
|
23
|
-
* https://github.com/sparklemotion/mechanize/issues
|
|
24
|
-
|
|
25
|
-
== Examples
|
|
26
|
-
|
|
27
|
-
If you are just starting, check out the GUIDE[http://docs.seattlerb.org/mechanize/GUIDE_rdoc.html] or
|
|
28
|
-
the EXAMPLES[http://docs.seattlerb.org/mechanize/EXAMPLES_rdoc.html] file.
|
|
29
|
-
|
|
30
|
-
== Developers
|
|
31
|
-
|
|
32
|
-
Use bundler to install dependencies:
|
|
33
|
-
|
|
34
|
-
bundle install
|
|
35
|
-
|
|
36
|
-
Run all tests with:
|
|
37
|
-
|
|
38
|
-
rake test
|
|
39
|
-
|
|
40
|
-
You can also use +autotest+ from the ZenTest gem to run tests.
|
|
41
|
-
|
|
42
|
-
See also Mechanize::TestCase to read about the built-in testing
|
|
43
|
-
infrastructure.
|
|
44
|
-
|
|
45
|
-
== Authors
|
|
46
|
-
|
|
47
|
-
Copyright (c) 2005 by Michael Neumann (mneumann@ntecs.de)
|
|
48
|
-
|
|
49
|
-
Copyright (c) 2006-2011:
|
|
50
|
-
|
|
51
|
-
* {Aaron Patterson}[http://tenderlovemaking.com] (aaron.patterson@gmail.com)
|
|
52
|
-
* {Mike Dalessio}[http://mike.daless.io] (mike@csa.net)
|
|
53
|
-
|
|
54
|
-
Copyright (c) 2011-2015:
|
|
55
|
-
|
|
56
|
-
* {Eric Hodel}[http://blog.segment7.net] (drbrain@segment7.net)
|
|
57
|
-
* {Akinori MUSHA}[http://blog.akinori.org] (knu@idaemons.org)
|
|
58
|
-
* {Lee Jarvis}[http://twitter.com/lee_jarvis] (ljjarvis@gmail.com)
|
|
59
|
-
|
|
60
|
-
This library comes with a shameless plug for employing me
|
|
61
|
-
(Aaron[http://tenderlovemaking.com/]) programming Ruby, my favorite language!
|
|
62
|
-
|
|
63
|
-
== Acknowledgments
|
|
64
|
-
|
|
65
|
-
This library was heavily influenced by its namesake in the Perl world. A big
|
|
66
|
-
thanks goes to {Andy Lester}[http://petdance.com],
|
|
67
|
-
the author of the original Perl module WWW::Mechanize which is available
|
|
68
|
-
here[http://search.cpan.org/dist/WWW-Mechanize/]. Ruby Mechanize would not be around without you!
|
|
69
|
-
|
|
70
|
-
Thank you to Michael Neumann for starting the Ruby version. Thanks to everyone
|
|
71
|
-
who's helped out in various ways. Finally, thank you to the people using this
|
|
72
|
-
library!
|
|
73
|
-
|
|
74
|
-
== License
|
|
75
|
-
|
|
76
|
-
This library is distributed under the MIT license. Please see the LICENSE[http://docs.seattlerb.org/mechanize/LICENSE_rdoc.html] file.
|
|
77
|
-
|