excon 0.64.0 → 0.71.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/data/cacert.pem +108 -77
  3. data/excon.gemspec +7 -2
  4. data/lib/excon.rb +11 -11
  5. data/lib/excon/connection.rb +34 -26
  6. data/lib/excon/constants.rb +2 -0
  7. data/lib/excon/error.rb +2 -0
  8. data/lib/excon/middlewares/mock.rb +2 -1
  9. data/lib/excon/middlewares/redirect_follower.rb +24 -2
  10. data/lib/excon/response.rb +1 -1
  11. data/lib/excon/socket.rb +1 -0
  12. data/lib/excon/ssl_socket.rb +4 -1
  13. data/lib/excon/utils.rb +14 -3
  14. data/lib/excon/version.rb +1 -1
  15. metadata +3 -101
  16. data/.document +0 -5
  17. data/.github/stale.yml +0 -17
  18. data/.gitignore +0 -13
  19. data/.rspec +0 -3
  20. data/.travis.yml +0 -17
  21. data/Gemfile +0 -19
  22. data/Rakefile +0 -41
  23. data/benchmarks/class_vs_lambda.rb +0 -50
  24. data/benchmarks/concat_vs_insert.rb +0 -21
  25. data/benchmarks/concat_vs_interpolate.rb +0 -22
  26. data/benchmarks/cr_lf.rb +0 -21
  27. data/benchmarks/downcase-eq-eq_vs_casecmp.rb +0 -169
  28. data/benchmarks/excon.rb +0 -69
  29. data/benchmarks/excon_vs.rb +0 -165
  30. data/benchmarks/for_vs_array_each.rb +0 -27
  31. data/benchmarks/for_vs_hash_each.rb +0 -27
  32. data/benchmarks/has_key-vs-lookup.rb +0 -177
  33. data/benchmarks/headers_case_sensitivity.rb +0 -83
  34. data/benchmarks/headers_split_vs_match.rb +0 -34
  35. data/benchmarks/implicit_block-vs-explicit_block.rb +0 -98
  36. data/benchmarks/merging.rb +0 -21
  37. data/benchmarks/single_vs_double_quotes.rb +0 -21
  38. data/benchmarks/string_ranged_index.rb +0 -87
  39. data/benchmarks/strip_newline.rb +0 -115
  40. data/benchmarks/vs_stdlib.rb +0 -82
  41. data/changelog.txt +0 -1113
  42. data/spec/excon/error_spec.rb +0 -139
  43. data/spec/excon/test/server_spec.rb +0 -28
  44. data/spec/excon_spec.rb +0 -7
  45. data/spec/helpers/file_path_helpers.rb +0 -22
  46. data/spec/helpers/warning_helpers.rb +0 -9
  47. data/spec/requests/basic_spec.rb +0 -40
  48. data/spec/requests/eof_requests_spec.rb +0 -36
  49. data/spec/requests/unix_socket_spec.rb +0 -38
  50. data/spec/requests/validation_spec.rb +0 -80
  51. data/spec/spec_helper.rb +0 -26
  52. data/spec/support/shared_contexts/test_server_context.rb +0 -83
  53. data/spec/support/shared_contexts/test_stub_context.rb +0 -11
  54. data/spec/support/shared_examples/shared_example_for_clients.rb +0 -220
  55. data/spec/support/shared_examples/shared_example_for_streaming_clients.rb +0 -20
  56. data/spec/support/shared_examples/shared_example_for_test_servers.rb +0 -16
  57. data/tests/authorization_header_tests.rb +0 -27
  58. data/tests/bad_tests.rb +0 -69
  59. data/tests/basic_tests.rb +0 -351
  60. data/tests/batch_requests.rb +0 -133
  61. data/tests/complete_responses.rb +0 -31
  62. data/tests/data/127.0.0.1.cert.crt +0 -17
  63. data/tests/data/127.0.0.1.cert.key +0 -28
  64. data/tests/data/excon.cert.crt +0 -17
  65. data/tests/data/excon.cert.key +0 -28
  66. data/tests/data/xs +0 -1
  67. data/tests/error_tests.rb +0 -145
  68. data/tests/header_tests.rb +0 -119
  69. data/tests/instrumentors/logging_instrumentor_tests.rb +0 -28
  70. data/tests/middleware_tests.rb +0 -27
  71. data/tests/middlewares/canned_response_tests.rb +0 -34
  72. data/tests/middlewares/capture_cookies_tests.rb +0 -34
  73. data/tests/middlewares/decompress_tests.rb +0 -157
  74. data/tests/middlewares/escape_path_tests.rb +0 -36
  75. data/tests/middlewares/idempotent_tests.rb +0 -245
  76. data/tests/middlewares/instrumentation_tests.rb +0 -315
  77. data/tests/middlewares/mock_tests.rb +0 -304
  78. data/tests/middlewares/redirect_follower_tests.rb +0 -112
  79. data/tests/pipeline_tests.rb +0 -40
  80. data/tests/proxy_tests.rb +0 -306
  81. data/tests/query_string_tests.rb +0 -87
  82. data/tests/rackups/basic.rb +0 -41
  83. data/tests/rackups/basic.ru +0 -3
  84. data/tests/rackups/basic_auth.ru +0 -14
  85. data/tests/rackups/deflater.ru +0 -4
  86. data/tests/rackups/proxy.ru +0 -18
  87. data/tests/rackups/query_string.ru +0 -13
  88. data/tests/rackups/redirecting.ru +0 -23
  89. data/tests/rackups/redirecting_with_cookie.ru +0 -40
  90. data/tests/rackups/request_headers.ru +0 -15
  91. data/tests/rackups/request_methods.ru +0 -21
  92. data/tests/rackups/response_header.ru +0 -18
  93. data/tests/rackups/ssl.ru +0 -16
  94. data/tests/rackups/ssl_mismatched_cn.ru +0 -15
  95. data/tests/rackups/ssl_verify_peer.ru +0 -16
  96. data/tests/rackups/streaming.ru +0 -30
  97. data/tests/rackups/thread_safety.ru +0 -17
  98. data/tests/rackups/timeout.ru +0 -14
  99. data/tests/rackups/webrick_patch.rb +0 -34
  100. data/tests/request_headers_tests.rb +0 -21
  101. data/tests/request_method_tests.rb +0 -47
  102. data/tests/request_tests.rb +0 -58
  103. data/tests/response_tests.rb +0 -197
  104. data/tests/servers/bad.rb +0 -25
  105. data/tests/servers/eof.rb +0 -17
  106. data/tests/servers/error.rb +0 -20
  107. data/tests/servers/good.rb +0 -342
  108. data/tests/servers/good_ipv4.rb +0 -8
  109. data/tests/servers/good_ipv6.rb +0 -8
  110. data/tests/test_helper.rb +0 -297
  111. data/tests/thread_safety_tests.rb +0 -39
  112. data/tests/timeout_tests.rb +0 -12
  113. data/tests/utils_tests.rb +0 -81
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0089e6e20aad3c735ea51b5dae6b90820b31d1379d2159cb01a2d2ab5e1e0fa8'
4
- data.tar.gz: f362e1a3bbedfa71887fcd4c53ef3d202cfe7a337a8d1414396787e8eb160733
3
+ metadata.gz: f6db50174258d3704a3bdb5cbf58cc57846d8e56f8ed55adf7e8c3f5f66f3d15
4
+ data.tar.gz: 25d3d6d365d53f0197fc45e0ea698ff2b9015d58666b25a76731fe0ebc1a9918
5
5
  SHA512:
6
- metadata.gz: d03f86c4ec2ab00e8190f462cc21e64709be82820898e3d1ce25229ebbe23a3026939b879a07dffb255e4dadf47a59f103cca6035661f7d361164e78a2144efc
7
- data.tar.gz: efecb7088b79a9e951cec7af4ae768addb8ed7bee909bfe6ace5cecbcb7d43cbbcb9846a04feebe6b17c545d20eeefbca8d2733865e0613e93f74cbc8b7f1179
6
+ metadata.gz: cae59c2aee4eee7db9363176b63edb3e05ba9c10da29c0ce22edeb7fe623e088173f87e998cc683e2a72c2545e513461deffccb4aace8f4f5a97fd6193519e42
7
+ data.tar.gz: 111b4548cd53a299b6518c2227e4db03ba939c03f8d934cf2452c35d0a25caeb6ee0f5855481663c0ff886cf37695304769730e67cebfad9b4800a4b5098593a
data/data/cacert.pem CHANGED
@@ -1,7 +1,7 @@
1
1
  ##
2
2
  ## Bundle of CA Root Certificates
3
3
  ##
4
- ## Certificate data from Mozilla as of: Wed Jan 23 04:12:09 2019 GMT
4
+ ## Certificate data from Mozilla as of: Wed Nov 27 04:12:10 2019 GMT
5
5
  ##
6
6
  ## This is a bundle of X.509 certificates of public Certificate Authorities
7
7
  ## (CA). These were automatically extracted from Mozilla's root certificates
@@ -14,7 +14,7 @@
14
14
  ## Just configure this file as the SSLCACertificateFile.
15
15
  ##
16
16
  ## Conversion done with mk-ca-bundle.pl version 1.27.
17
- ## SHA256: 18372117493b5b7ec006c31d966143fc95a9464a2b5f8d5188e23c5557b2292d
17
+ ## SHA256: 607309057d0ec70f8e4e97b03906bafb2fcebb24cd37b5e8293e681ae26ceae0
18
18
  ##
19
19
 
20
20
 
@@ -592,28 +592,6 @@ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
592
592
  vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
593
593
  -----END CERTIFICATE-----
594
594
 
595
- Certplus Class 2 Primary CA
596
- ===========================
597
- -----BEGIN CERTIFICATE-----
598
- MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
599
- BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
600
- OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
601
- dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
602
- ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
603
- 5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
604
- Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
605
- YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
606
- e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
607
- CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
608
- YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
609
- L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
610
- P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
611
- TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
612
- 7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
613
- //1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
614
- l7+ijrRU
615
- -----END CERTIFICATE-----
616
-
617
595
  DST Root CA X3
618
596
  ==============
619
597
  -----BEGIN CERTIFICATE-----
@@ -921,28 +899,6 @@ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
921
899
  WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
922
900
  -----END CERTIFICATE-----
923
901
 
924
- Deutsche Telekom Root CA 2
925
- ==========================
926
- -----BEGIN CERTIFICATE-----
927
- MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
928
- RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
929
- A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
930
- MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
931
- A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
932
- b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
933
- bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
934
- KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
935
- AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
936
- Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
937
- jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
938
- HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
939
- E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
940
- zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
941
- rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
942
- dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
943
- Cm26OWMohpLzGITY+9HPBVZkVw==
944
- -----END CERTIFICATE-----
945
-
946
902
  Cybertrust Global Root
947
903
  ======================
948
904
  -----BEGIN CERTIFICATE-----
@@ -2613,37 +2569,6 @@ kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C
2613
2569
  ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su
2614
2570
  -----END CERTIFICATE-----
2615
2571
 
2616
- Certinomis - Root CA
2617
- ====================
2618
- -----BEGIN CERTIFICATE-----
2619
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x
2628
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV
2636
- 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
- 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
- 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
- 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
- Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng
2641
- 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
- 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
- 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
2644
- hkIGuUE=
2645
- -----END CERTIFICATE-----
2646
-
2647
2572
  OISTE WISeKey Global Root GB CA
2648
2573
  ===============================
2649
2574
  -----BEGIN CERTIFICATE-----
@@ -3399,3 +3324,109 @@ tlu3zM63Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayhjWZS
3399
3324
  aX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw3kAP+HwV96LOPNde
3400
3325
  E4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0=
3401
3326
  -----END CERTIFICATE-----
3327
+
3328
+ emSign Root CA - G1
3329
+ ===================
3330
+ -----BEGIN CERTIFICATE-----
3331
+ MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjET
3332
+ MBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRl
3333
+ ZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgx
3334
+ ODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVk
3335
+ aHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIB
3336
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTN
3337
+ LnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1
3338
+ cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHW
3339
+ DV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ
3340
+ 6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrH
3341
+ hQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEG
3342
+ MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2
3343
+ vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743Q
3344
+ NcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q
3345
+ +Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeih
3346
+ U80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx
3347
+ iN66zB+Afko=
3348
+ -----END CERTIFICATE-----
3349
+
3350
+ emSign ECC Root CA - G3
3351
+ =======================
3352
+ -----BEGIN CERTIFICATE-----
3353
+ MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEG
3354
+ A1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg
3355
+ MB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4
3356
+ MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11
3357
+ ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g
3358
+ RzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc
3359
+ 58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIr
3360
+ MgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMC
3361
+ AQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+D
3362
+ CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7
3363
+ jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj
3364
+ -----END CERTIFICATE-----
3365
+
3366
+ emSign Root CA - C1
3367
+ ===================
3368
+ -----BEGIN CERTIFICATE-----
3369
+ MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx
3370
+ EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp
3371
+ Z24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UE
3372
+ BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQD
3373
+ ExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+up
3374
+ ufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/
3375
+ Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGX
3376
+ OFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4V
3377
+ I5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleooms
3378
+ lMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+
3379
+ XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD
3380
+ ggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp
3381
+ /6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1
3382
+ NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9
3383
+ wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ
3384
+ BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI=
3385
+ -----END CERTIFICATE-----
3386
+
3387
+ emSign ECC Root CA - C3
3388
+ =======================
3389
+ -----BEGIN CERTIFICATE-----
3390
+ MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG
3391
+ A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF
3392
+ Q0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UE
3393
+ BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQD
3394
+ ExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd
3395
+ 6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9
3396
+ SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkA
3397
+ B2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gA
3398
+ MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU
3399
+ ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ==
3400
+ -----END CERTIFICATE-----
3401
+
3402
+ Hongkong Post Root CA 3
3403
+ =======================
3404
+ -----BEGIN CERTIFICATE-----
3405
+ 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
3431
+ dBb9HxEGmpv0
3432
+ -----END CERTIFICATE-----
data/excon.gemspec CHANGED
@@ -11,8 +11,13 @@ Gem::Specification.new do |s|
11
11
  s.license = 'MIT'
12
12
  s.rdoc_options = ["--charset=UTF-8"]
13
13
  s.extra_rdoc_files = %w[README.md CONTRIBUTORS.md CONTRIBUTING.md]
14
- s.files = `git ls-files -z`.split("\x0")
15
- s.test_files = s.files.select { |path| path =~ /^[spec|tests]\/.*_[spec|tests]\.rb/ }
14
+ s.files = `git ls-files -- {data,lib}/*`.split("\n") + [
15
+ "CONTRIBUTING.md",
16
+ "CONTRIBUTORS.md",
17
+ "LICENSE.md",
18
+ "README.md",
19
+ "excon.gemspec"
20
+ ]
16
21
 
17
22
  s.add_development_dependency('rspec', '>= 3.5.0')
18
23
  s.add_development_dependency('activesupport')
data/lib/excon.rb CHANGED
@@ -113,9 +113,9 @@ module Excon
113
113
 
114
114
  # @see Connection#initialize
115
115
  # Initializes a new keep-alive session for a given remote host
116
- # @param [String] url The destination URL
117
- # @param [Hash<Symbol, >] params One or more option params to set on the Connection instance
118
- # @return [Connection] A new Excon::Connection instance
116
+ # @param [String] url The destination URL
117
+ # @param [Hash<Symbol, >] params One or more option params to set on the Connection instance
118
+ # @return [Connection] A new Excon::Connection instance
119
119
  def new(url, params = {})
120
120
  uri_parser = params[:uri_parser] || defaults[:uri_parser]
121
121
  uri = uri_parser.parse(url)
@@ -143,9 +143,9 @@ module Excon
143
143
  end
144
144
 
145
145
  # push an additional stub onto the list to check for mock requests
146
- # @param [Hash<Symbol, >] request params to match against, omitted params match all
147
- # @param [Hash<Symbol, >] response params to return from matched request or block to call with params
148
- def stub(request_params = {}, response_params = nil)
146
+ # @param request_params [Hash<Symbol, >] request params to match against, omitted params match all
147
+ # @param response_params [Hash<Symbol, >] response params to return from matched request or block to call with params
148
+ def stub(request_params = {}, response_params = nil, &block)
149
149
  if method = request_params.delete(:method)
150
150
  request_params[:method] = method.to_s.downcase.to_sym
151
151
  end
@@ -175,7 +175,7 @@ module Excon
175
175
  if response_params
176
176
  raise(ArgumentError.new("stub requires either response_params OR a block"))
177
177
  else
178
- stub = [request_params, Proc.new]
178
+ stub = [request_params, block]
179
179
  end
180
180
  elsif response_params
181
181
  stub = [request_params, response_params]
@@ -187,8 +187,8 @@ module Excon
187
187
  end
188
188
 
189
189
  # get a stub matching params or nil
190
- # @param [Hash<Symbol, >] request params to match against, omitted params match all
191
- # @return [Hash<Symbol, >] response params to return from matched request or block to call with params
190
+ # @param request_params [Hash<Symbol, >] request params to match against, omitted params match all
191
+ # @return [Hash<Symbol, >] response params to return from matched request or block to call with params
192
192
  def stub_for(request_params={})
193
193
  if method = request_params.delete(:method)
194
194
  request_params[:method] = method.to_s.downcase.to_sym
@@ -236,8 +236,8 @@ module Excon
236
236
  end
237
237
 
238
238
  # remove first/oldest stub matching request_params
239
- # @param [Hash<Symbol, >] request params to match against, omitted params match all
240
- # @return [Hash<Symbol, >] response params from deleted stub
239
+ # @param request_params [Hash<Symbol, >] request params to match against, omitted params match all
240
+ # @return [Hash<Symbol, >] response params from deleted stub
241
241
  def unstub(request_params = {})
242
242
  stub = stub_for(request_params)
243
243
  Excon.stubs.delete_at(Excon.stubs.index(stub))
@@ -43,22 +43,22 @@ module Excon
43
43
  end
44
44
 
45
45
  # Initializes a new Connection instance
46
- # @param [Hash<Symbol, >] params One or more optional params
47
- # @option params [String] :body Default text to be sent over a socket. Only used if :body absent in Connection#request params
48
- # @option params [Hash<Symbol, String>] :headers The default headers to supply in a request. Only used if params[:headers] is not supplied to Connection#request
49
- # @option params [String] :host The destination host's reachable DNS name or IP, in the form of a String. IPv6 addresses must be wrapped (e.g. [::1]). See URI#host.
50
- # @option params [String] :hostname Same as host, but usable for socket connections. IPv6 addresses must not be wrapped (e.g. ::1). See URI#hostname.
51
- # @option params [String] :path Default path; appears after 'scheme://host:port/'. Only used if params[:path] is not supplied to Connection#request
52
- # @option params [Fixnum] :port The port on which to connect, to the destination host
53
- # @option params [Hash] :query Default query; appended to the 'scheme://host:port/path/' in the form of '?key=value'. Will only be used if params[:query] is not supplied to Connection#request
54
- # @option params [String] :scheme The protocol; 'https' causes OpenSSL to be used
55
- # @option params [String] :socket The path to the unix socket (required for 'unix://' connections)
56
- # @option params [String] :ciphers Only use the specified SSL/TLS cipher suites; use OpenSSL cipher spec format e.g. 'HIGH:!aNULL:!3DES' or 'AES256-SHA:DES-CBC3-SHA'
57
- # @option params [String] :proxy Proxy server; e.g. 'http://myproxy.com:8888'
58
- # @option params [Fixnum] :retry_limit Set how many times we'll retry a failed request. (Default 4)
59
- # @option params [Fixnum] :retry_interval Set how long to wait between retries. (Default 0)
60
- # @option params [Class] :instrumentor Responds to #instrument as in ActiveSupport::Notifications
61
- # @option params [String] :instrumentor_name Name prefix for #instrument events. Defaults to 'excon'
46
+ # @param [Hash<Symbol, >] params One or more optional params
47
+ # @option params [String] :body Default text to be sent over a socket. Only used if :body absent in Connection#request params
48
+ # @option params [Hash<Symbol, String>] :headers The default headers to supply in a request. Only used if params[:headers] is not supplied to Connection#request
49
+ # @option params [String] :host The destination host's reachable DNS name or IP, in the form of a String. IPv6 addresses must be wrapped (e.g. [::1]). See URI#host.
50
+ # @option params [String] :hostname Same as host, but usable for socket connections. IPv6 addresses must not be wrapped (e.g. ::1). See URI#hostname.
51
+ # @option params [String] :path Default path; appears after 'scheme://host:port/'. Only used if params[:path] is not supplied to Connection#request
52
+ # @option params [Fixnum] :port The port on which to connect, to the destination host
53
+ # @option params [Hash] :query Default query; appended to the 'scheme://host:port/path/' in the form of '?key=value'. Will only be used if params[:query] is not supplied to Connection#request
54
+ # @option params [String] :scheme The protocol; 'https' causes OpenSSL to be used
55
+ # @option params [String] :socket The path to the unix socket (required for 'unix://' connections)
56
+ # @option params [String] :ciphers Only use the specified SSL/TLS cipher suites; use OpenSSL cipher spec format e.g. 'HIGH:!aNULL:!3DES' or 'AES256-SHA:DES-CBC3-SHA'
57
+ # @option params [String] :proxy Proxy server; e.g. 'http://myproxy.com:8888'
58
+ # @option params [Fixnum] :retry_limit Set how many times we'll retry a failed request. (Default 4)
59
+ # @option params [Fixnum] :retry_interval Set how long to wait between retries. (Default 0)
60
+ # @option params [Class] :instrumentor Responds to #instrument as in ActiveSupport::Notifications
61
+ # @option params [String] :instrumentor_name Name prefix for #instrument events. Defaults to 'excon'
62
62
  def initialize(params = {})
63
63
  @data = Excon.defaults.dup
64
64
  # merge does not deep-dup, so make sure headers is not the original
@@ -221,12 +221,12 @@ module Excon
221
221
  end
222
222
 
223
223
  # Sends the supplied request to the destination host.
224
- # @yield [chunk] @see Response#self.parse
225
- # @param [Hash<Symbol, >] params One or more optional params, override defaults set in Connection.new
226
- # @option params [String] :body text to be sent over a socket
227
- # @option params [Hash<Symbol, String>] :headers The default headers to supply in a request
228
- # @option params [String] :path appears after 'scheme://host:port/'
229
- # @option params [Hash] :query appended to the 'scheme://host:port/path/' in the form of '?key=value'
224
+ # @yield [chunk] @see Response#self.parse
225
+ # @param [Hash<Symbol, >] params One or more optional params, override defaults set in Connection.new
226
+ # @option params [String] :body text to be sent over a socket
227
+ # @option params [Hash<Symbol, String>] :headers The default headers to supply in a request
228
+ # @option params [String] :path appears after 'scheme://host:port/'
229
+ # @option params [Hash] :query appended to the 'scheme://host:port/path/' in the form of '?key=value'
230
230
  def request(params={}, &block)
231
231
  # @data has defaults, merge in new params to override
232
232
  datum = @data.merge(params)
@@ -257,11 +257,16 @@ module Excon
257
257
 
258
258
  if block_given?
259
259
  Excon.display_warning('Excon requests with a block are deprecated, pass :response_block instead.')
260
- datum[:response_block] = Proc.new
260
+ datum[:response_block] = block
261
261
  end
262
262
 
263
263
  datum[:connection] = self
264
264
 
265
+ # cleanup data left behind on persistent connection after interrupt
266
+ if datum[:persistent] && !@persistent_socket_reusable
267
+ reset
268
+ end
269
+
265
270
  datum[:stack] = datum[:middlewares].map do |middleware|
266
271
  lambda {|stack| middleware.new(stack)}
267
272
  end.reverse.inject(self) do |middlewares, middleware|
@@ -270,7 +275,9 @@ module Excon
270
275
  datum = datum[:stack].request_call(datum)
271
276
 
272
277
  unless datum[:pipeline]
278
+ @persistent_socket_reusable = false
273
279
  datum = response(datum)
280
+ @persistent_socket_reusable = true
274
281
 
275
282
  if datum[:persistent]
276
283
  if key = datum[:response][:headers].keys.detect {|k| k.casecmp('Connection') == 0 }
@@ -301,7 +308,7 @@ module Excon
301
308
  end
302
309
 
303
310
  # Sends the supplied requests to the destination host using pipelining.
304
- # @pipeline_params [Array<Hash>] pipeline_params An array of one or more optional params, override defaults set in Connection.new, see #request for details
311
+ # @param pipeline_params [Array<Hash>] An array of one or more optional params, override defaults set in Connection.new, see #request for details
305
312
  def requests(pipeline_params)
306
313
  pipeline_params.each {|params| params.merge!(:pipeline => true, :persistent => true) }
307
314
  pipeline_params.last.merge!(:persistent => @data[:persistent])
@@ -328,7 +335,7 @@ module Excon
328
335
  # Sends the supplied requests to the destination host using pipelining in
329
336
  # batches of @limit [Numeric] requests. This is your soft file descriptor
330
337
  # limit by default, typically 256.
331
- # @pipeline_params [Array<Hash>] pipeline_params An array of one or more optional params, override defaults set in Connection.new, see #request for details
338
+ # @param pipeline_params [Array<Hash>] An array of one or more optional params, override defaults set in Connection.new, see #request for details
332
339
  def batch_requests(pipeline_params, limit = nil)
333
340
  limit ||= Process.respond_to?(:getrlimit) ? Process.getrlimit(:NOFILE).first : 256
334
341
  responses = []
@@ -344,6 +351,7 @@ module Excon
344
351
  if old_socket = sockets.delete(@socket_key)
345
352
  old_socket.close rescue nil
346
353
  end
354
+ @persistent_socket_reusable = true
347
355
  end
348
356
 
349
357
  # Generate HTTP request verb methods
@@ -440,7 +448,7 @@ module Excon
440
448
  datum[:stack].response_call(datum)
441
449
  rescue => error
442
450
  case error
443
- when Excon::Errors::HTTPStatusError, Excon::Errors::Timeout
451
+ when Excon::Errors::HTTPStatusError, Excon::Errors::Timeout, Excon::Errors::TooManyRedirects
444
452
  raise(error)
445
453
  else
446
454
  raise_socket_error(error)
@@ -12,6 +12,8 @@ module Excon
12
12
  CHUNK_SIZE = DEFAULT_CHUNK_SIZE
13
13
  end
14
14
 
15
+ DEFAULT_REDIRECT_LIMIT = 10
16
+
15
17
  DEFAULT_RETRY_LIMIT = 4
16
18
 
17
19
  DEFAULT_RETRY_ERRORS = [
data/lib/excon/error.rb CHANGED
@@ -50,7 +50,9 @@ or:
50
50
  class InvalidHeaderValue < Error; end
51
51
  class Timeout < Error; end
52
52
  class ResponseParse < Error; end
53
+ class ProxyConnectionError < Error; end
53
54
  class ProxyParse < Error; end
55
+ class TooManyRedirects < Error; end
54
56
 
55
57
  # Base class for HTTP Error classes
56
58
  class HTTPStatus < Error
@@ -26,11 +26,12 @@ module Excon
26
26
  end
27
27
 
28
28
  if stub = Excon.stub_for(datum)
29
+ datum[:remote_ip] ||= '127.0.0.1'
29
30
  datum[:response] = {
30
31
  :body => '',
31
32
  :headers => {},
32
33
  :status => 200,
33
- :remote_ip => '127.0.0.1'
34
+ :remote_ip => datum[:remote_ip]
34
35
  }
35
36
 
36
37
  stub_datum = case stub.last