mint_http 1.0.0 → 1.1.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 +4 -4
- data/CHANGELOG.md +5 -1
- data/Gemfile +1 -0
- data/Gemfile.lock +5 -1
- data/http.log +692 -0
- data/lib/mint_http/net_http.rb +19 -0
- data/lib/mint_http/net_http_factory.rb +7 -0
- data/lib/mint_http/pool.rb +9 -0
- data/lib/mint_http/pool_entry.rb +8 -7
- data/lib/mint_http/request.rb +16 -5
- data/lib/mint_http/response.rb +28 -1
- data/lib/mint_http/version.rb +1 -1
- data/lib/mint_http.rb +1 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81270d63b70e3b2fbedce35352c6be839dc1cd56733cc3444e9c14abc562b048
|
4
|
+
data.tar.gz: b324e059ba388938dd2a2db8d7dfe78f0c17e51a903b334af17d7584b350770e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 765ce835680a70f841ad6e697ea1e687525fb89434339bf1359ccfaeb1550733f75aa7e5bc0ff9175682a3ab4487b324dc2d3c0302c3553b95436551f4a9725f
|
7
|
+
data.tar.gz: 6d6fb7f1b2cb3668c95e556b9457b55d70fc2f0b3a5696931fedc19717fcff1c0102119736384e10ca1831f4176cf7681cea63248c711a013b458fc7b4e1c5d8
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
-
## [0.1
|
3
|
+
## [1.0.1] - 2025-05-26
|
4
|
+
|
5
|
+
- Add SSL min and max version support
|
6
|
+
|
7
|
+
## [1.0.0] - 2024-11-05
|
4
8
|
|
5
9
|
- Improve error handling by introducing new error base class that makes it easy for users to catch and deal with errors.
|
6
10
|
- Add more HTTP error classes.
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
mint_http (
|
4
|
+
mint_http (1.1.0)
|
5
5
|
base64
|
6
6
|
json
|
7
7
|
net-http
|
@@ -15,6 +15,7 @@ GEM
|
|
15
15
|
base64 (0.2.0)
|
16
16
|
json (2.7.2)
|
17
17
|
minitest (5.18.0)
|
18
|
+
mutex_m (0.2.0)
|
18
19
|
net-http (0.4.1)
|
19
20
|
uri
|
20
21
|
openssl (3.2.0)
|
@@ -26,10 +27,13 @@ GEM
|
|
26
27
|
|
27
28
|
PLATFORMS
|
28
29
|
arm64-darwin-22
|
30
|
+
arm64-darwin-23
|
31
|
+
arm64-darwin-24
|
29
32
|
|
30
33
|
DEPENDENCIES
|
31
34
|
minitest (~> 5.0)
|
32
35
|
mint_http!
|
36
|
+
mutex_m
|
33
37
|
rake (~> 13.0)
|
34
38
|
resolv-replace
|
35
39
|
|
data/http.log
ADDED
@@ -0,0 +1,692 @@
|
|
1
|
+
I, [2024-07-20T17:01:40.725955 #38292] INFO -- : MintHttp Log (https://api.moyasar.com)
|
2
|
+
@@ Timeouts: 5, 5, 20
|
3
|
+
@@ Time: 619603.133 -> 619603.425 connecting: 0.292 total: 0.395 seconds
|
4
|
+
@@ TLS: TLSv1.2 Cipher: ECDHE-RSA-AES128-GCM-SHA256
|
5
|
+
-> POST HTTP/1.1
|
6
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
7
|
+
-> Accept: application/json
|
8
|
+
-> User-Agent: Mint Http
|
9
|
+
-> Host: api.moyasar.com
|
10
|
+
-> Content-Type: application/json
|
11
|
+
-> Content-Length: 13
|
12
|
+
-> {"foo":"bar"}
|
13
|
+
=======
|
14
|
+
<- Response: HTTP/1.1 404 Not Found
|
15
|
+
<- Date: Sat, 20 Jul 2024 14:01:40 GMT
|
16
|
+
<- Content-Type: application/json; charset=utf-8
|
17
|
+
<- Content-Length: 91
|
18
|
+
<- Connection: keep-alive
|
19
|
+
<- X-Frame-Options: SAMEORIGIN
|
20
|
+
<- X-Xss-Protection: 0
|
21
|
+
<- X-Content-Type-Options: nosniff
|
22
|
+
<- X-Download-Options: noopen
|
23
|
+
<- X-Permitted-Cross-Domain-Policies: none
|
24
|
+
<- Referrer-Policy: strict-origin-when-cross-origin
|
25
|
+
<- X-Request-Id: b1b4dd16-ffff-4e75-96d6-0752264ab291
|
26
|
+
<- X-Runtime: 0.005768
|
27
|
+
<- Strict-Transport-Security: max-age=63072000; includeSubDomains
|
28
|
+
<- Vary: Origin
|
29
|
+
<- Length: 91 Body: {
|
30
|
+
"type": "invalid_request_error",
|
31
|
+
"message": "Resource not found",
|
32
|
+
"errors": null
|
33
|
+
}
|
34
|
+
I, [2024-07-20T17:01:42.689559 #38292] INFO -- : MintHttp Log (https://ipinfo.com/1.1.1.1)
|
35
|
+
@@ Timeouts: 5, 5, 20
|
36
|
+
@@ Time: 619604.935 -> 619605.308 connecting: 0.373 total: 0.556 seconds
|
37
|
+
@@ TLS: TLSv1.3 Cipher: TLS_AES_256_GCM_SHA384
|
38
|
+
-> POST /1.1.1.1 HTTP/1.1
|
39
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
40
|
+
-> Accept: application/json
|
41
|
+
-> User-Agent: Mint Http
|
42
|
+
-> Host: ipinfo.com
|
43
|
+
-> Content-Type: application/json
|
44
|
+
-> Content-Length: 13
|
45
|
+
-> {"foo":"bar"}
|
46
|
+
=======
|
47
|
+
<- Response: HTTP/1.1 404 Not Found
|
48
|
+
<- Date: Sat, 20 Jul 2024 14:01:42 GMT
|
49
|
+
<- Server: Apache
|
50
|
+
<- Content-Length: 315
|
51
|
+
<- Content-Type: text/html; charset=iso-8859-1
|
52
|
+
<- Length: 315 Body: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
53
|
+
<html><head>
|
54
|
+
<title>404 Not Found</title>
|
55
|
+
</head><body>
|
56
|
+
<h1>Not Found</h1>
|
57
|
+
<p>The requested URL was not found on this server.</p>
|
58
|
+
<p>Additionally, a 404 Not Found
|
59
|
+
error was encountered while trying to use an ErrorDocument to handle the request.</p>
|
60
|
+
</body></html>
|
61
|
+
I, [2024-07-20T17:01:43.075798 #38292] INFO -- : MintHttp Log (https://jsonplaceholder.typicode.com/todos)
|
62
|
+
@@ Timeouts: 5, 5, 20
|
63
|
+
@@ Time: 619605.492 -> 619605.671 connecting: 0.179 total: 0.385 seconds
|
64
|
+
@@ TLS: TLSv1.3 Cipher: TLS_AES_256_GCM_SHA384
|
65
|
+
-> POST /todos HTTP/1.1
|
66
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
67
|
+
-> Accept: application/json
|
68
|
+
-> User-Agent: Mint Http
|
69
|
+
-> Host: jsonplaceholder.typicode.com
|
70
|
+
-> Content-Type: application/json
|
71
|
+
-> Content-Length: 13
|
72
|
+
-> {"foo":"bar"}
|
73
|
+
=======
|
74
|
+
<- Response: HTTP/1.1 201 Created
|
75
|
+
<- Date: Sat, 20 Jul 2024 14:01:43 GMT
|
76
|
+
<- Content-Type: application/json; charset=utf-8
|
77
|
+
<- Content-Length: 31
|
78
|
+
<- Connection: keep-alive
|
79
|
+
<- Report-To: {"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1721484103&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=b4Wm3JpEawzMn3h85DNdBHYfHUie%2BeyhfNXaCcm4ybI%3D"}]}
|
80
|
+
<- Reporting-Endpoints: heroku-nel=https://nel.heroku.com/reports?ts=1721484103&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=b4Wm3JpEawzMn3h85DNdBHYfHUie%2BeyhfNXaCcm4ybI%3D
|
81
|
+
<- Nel: {"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}
|
82
|
+
<- X-Powered-By: Express
|
83
|
+
<- X-Ratelimit-Limit: 1000
|
84
|
+
<- X-Ratelimit-Remaining: 999
|
85
|
+
<- X-Ratelimit-Reset: 1721484152
|
86
|
+
<- Vary: Origin, X-HTTP-Method-Override, Accept-Encoding
|
87
|
+
<- Access-Control-Allow-Credentials: true
|
88
|
+
<- Cache-Control: no-cache
|
89
|
+
<- Pragma: no-cache
|
90
|
+
<- Expires: -1
|
91
|
+
<- Access-Control-Expose-Headers: Location
|
92
|
+
<- Location: https://jsonplaceholder.typicode.com/todos/201
|
93
|
+
<- X-Content-Type-Options: nosniff
|
94
|
+
<- Etag: W/"1f-v7q09ihdcrnA2mAxihAAQHEaYaQ"
|
95
|
+
<- Via: 1.1 vegur
|
96
|
+
<- Cf-Cache-Status: DYNAMIC
|
97
|
+
<- Server: cloudflare
|
98
|
+
<- Cf-Ray: 8a637c1bd939374b-MXP
|
99
|
+
<- Alt-Svc: h3=":443"; ma=86400
|
100
|
+
<- Length: 31 Body: {
|
101
|
+
"foo": "bar",
|
102
|
+
"id": 201
|
103
|
+
}
|
104
|
+
I, [2024-07-20T17:01:41.122566 #38292] INFO -- : MintHttp Log (https://api.moyasar.com/v1/payments)
|
105
|
+
@@ Timeouts: 5, 5, 20
|
106
|
+
@@ Time: 619603.534 -> 619603.822 connecting: 0.288 total: 0.39 seconds
|
107
|
+
@@ TLS: TLSv1.2 Cipher: ECDHE-RSA-AES128-GCM-SHA256
|
108
|
+
-> POST /v1/payments HTTP/1.1
|
109
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
110
|
+
-> Accept: application/json
|
111
|
+
-> User-Agent: Mint Http
|
112
|
+
-> Host: api.moyasar.com
|
113
|
+
-> Content-Type: application/json
|
114
|
+
-> Content-Length: 13
|
115
|
+
-> {"foo":"bar"}
|
116
|
+
=======
|
117
|
+
<- Response: HTTP/1.1 401 Unauthorized
|
118
|
+
<- Date: Sat, 20 Jul 2024 14:01:41 GMT
|
119
|
+
<- Content-Type: application/json; charset=utf-8
|
120
|
+
<- Content-Length: 91
|
121
|
+
<- Connection: keep-alive
|
122
|
+
<- X-Frame-Options: SAMEORIGIN
|
123
|
+
<- X-Xss-Protection: 0
|
124
|
+
<- X-Content-Type-Options: nosniff
|
125
|
+
<- X-Download-Options: noopen
|
126
|
+
<- X-Permitted-Cross-Domain-Policies: none
|
127
|
+
<- Referrer-Policy: strict-origin-when-cross-origin
|
128
|
+
<- Www-Authenticate: Basic realm="Application"
|
129
|
+
<- Cache-Control: no-cache
|
130
|
+
<- X-Request-Id: 763be73c-965f-4a9a-9625-311451e4ae28
|
131
|
+
<- X-Runtime: 0.005780
|
132
|
+
<- Strict-Transport-Security: max-age=63072000; includeSubDomains
|
133
|
+
<- Vary: Origin
|
134
|
+
<- Length: 91 Body: {"type":"authentication_error","message":"Invalid authorization credentials","errors":null}
|
135
|
+
I, [2024-07-20T17:01:41.431665 #38292] INFO -- : MintHttp Log (https://dashboard.moyasar.com)
|
136
|
+
@@ Timeouts: 5, 5, 20
|
137
|
+
@@ Time: 619603.925 -> 619604.121 connecting: 0.196 total: 0.308 seconds
|
138
|
+
@@ TLS: TLSv1.3 Cipher: TLS_AES_128_GCM_SHA256
|
139
|
+
-> POST HTTP/1.1
|
140
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
141
|
+
-> Accept: application/json
|
142
|
+
-> User-Agent: Mint Http
|
143
|
+
-> Host: dashboard.moyasar.com
|
144
|
+
-> Content-Type: application/json
|
145
|
+
-> Content-Length: 13
|
146
|
+
-> {"foo":"bar"}
|
147
|
+
=======
|
148
|
+
<- Response: HTTP/1.1 500 Internal Server Error
|
149
|
+
<- Date: Sat, 20 Jul 2024 14:01:41 GMT
|
150
|
+
<- Content-Type: text/plain; charset=utf-8
|
151
|
+
<- Transfer-Encoding: chunked
|
152
|
+
<- Connection: keep-alive
|
153
|
+
<- X-Request-Id: 61cd5ca0-98a2-4b11-aa7a-93aa6b999026
|
154
|
+
<- X-Runtime: 0.003495
|
155
|
+
<- Vary: Accept-Encoding
|
156
|
+
<- Strict-Transport-Security: max-age=63072000; includeSubDomains
|
157
|
+
<- Length: 182 Body: 500 Internal Server Error
|
158
|
+
If you are the administrator of this website, then please read this web application's log file and/or the web server's log file to find out what went wrong.
|
159
|
+
I, [2024-07-20T17:01:44.144972 #38292] INFO -- : MintHttp Log (https://jsonplaceholder.typicode.com/posts/1)
|
160
|
+
@@ Timeouts: 5, 5, 20
|
161
|
+
@@ Time: 619606.577 -> 619606.747 connecting: 0.17 total: 0.37 seconds
|
162
|
+
@@ TLS: TLSv1.3 Cipher: TLS_AES_256_GCM_SHA384
|
163
|
+
-> POST /posts/1 HTTP/1.1
|
164
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
165
|
+
-> Accept: application/json
|
166
|
+
-> User-Agent: Mint Http
|
167
|
+
-> Host: jsonplaceholder.typicode.com
|
168
|
+
-> Content-Type: application/json
|
169
|
+
-> Content-Length: 13
|
170
|
+
-> {"foo":"bar"}
|
171
|
+
=======
|
172
|
+
<- Response: HTTP/1.1 404 Not Found
|
173
|
+
<- Date: Sat, 20 Jul 2024 14:01:44 GMT
|
174
|
+
<- Content-Type: application/json; charset=utf-8
|
175
|
+
<- Content-Length: 2
|
176
|
+
<- Connection: keep-alive
|
177
|
+
<- Report-To: {"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1721484104&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=6Kc1EgeyymsGCnxaFYx8FFjCqSjPngbLD%2Fy%2Bn7QqOow%3D"}]}
|
178
|
+
<- Reporting-Endpoints: heroku-nel=https://nel.heroku.com/reports?ts=1721484104&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=6Kc1EgeyymsGCnxaFYx8FFjCqSjPngbLD%2Fy%2Bn7QqOow%3D
|
179
|
+
<- Nel: {"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}
|
180
|
+
<- X-Powered-By: Express
|
181
|
+
<- X-Ratelimit-Limit: 1000
|
182
|
+
<- X-Ratelimit-Remaining: 997
|
183
|
+
<- X-Ratelimit-Reset: 1721484152
|
184
|
+
<- Vary: Origin, X-HTTP-Method-Override, Accept-Encoding
|
185
|
+
<- Access-Control-Allow-Credentials: true
|
186
|
+
<- Cache-Control: no-cache
|
187
|
+
<- Pragma: no-cache
|
188
|
+
<- Expires: -1
|
189
|
+
<- X-Content-Type-Options: nosniff
|
190
|
+
<- Etag: W/"2-vyGp6PvFo4RvsFtPoIWeCReyIC8"
|
191
|
+
<- Via: 1.1 vegur
|
192
|
+
<- Cf-Cache-Status: DYNAMIC
|
193
|
+
<- Server: cloudflare
|
194
|
+
<- Cf-Ray: 8a637c2298c0bab7-MXP
|
195
|
+
<- Alt-Svc: h3=":443"; ma=86400
|
196
|
+
<- Length: 2 Body: {}
|
197
|
+
I, [2024-07-20T17:01:44.523950 #38292] INFO -- : MintHttp Log (https://jsonplaceholder.typicode.com/posts)
|
198
|
+
@@ Timeouts: 5, 5, 20
|
199
|
+
@@ Time: 619606.947 -> 619607.12 connecting: 0.173 total: 0.378 seconds
|
200
|
+
@@ TLS: TLSv1.3 Cipher: TLS_AES_256_GCM_SHA384
|
201
|
+
-> POST /posts HTTP/1.1
|
202
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
203
|
+
-> Accept: application/json
|
204
|
+
-> User-Agent: Mint Http
|
205
|
+
-> Host: jsonplaceholder.typicode.com
|
206
|
+
-> Content-Type: application/json
|
207
|
+
-> Content-Length: 13
|
208
|
+
-> {"foo":"bar"}
|
209
|
+
=======
|
210
|
+
<- Response: HTTP/1.1 201 Created
|
211
|
+
<- Date: Sat, 20 Jul 2024 14:01:44 GMT
|
212
|
+
<- Content-Type: application/json; charset=utf-8
|
213
|
+
<- Content-Length: 31
|
214
|
+
<- Connection: keep-alive
|
215
|
+
<- Report-To: {"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1721484104&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=6Kc1EgeyymsGCnxaFYx8FFjCqSjPngbLD%2Fy%2Bn7QqOow%3D"}]}
|
216
|
+
<- Reporting-Endpoints: heroku-nel=https://nel.heroku.com/reports?ts=1721484104&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=6Kc1EgeyymsGCnxaFYx8FFjCqSjPngbLD%2Fy%2Bn7QqOow%3D
|
217
|
+
<- Nel: {"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}
|
218
|
+
<- X-Powered-By: Express
|
219
|
+
<- X-Ratelimit-Limit: 1000
|
220
|
+
<- X-Ratelimit-Remaining: 996
|
221
|
+
<- X-Ratelimit-Reset: 1721484152
|
222
|
+
<- Vary: Origin, X-HTTP-Method-Override, Accept-Encoding
|
223
|
+
<- Access-Control-Allow-Credentials: true
|
224
|
+
<- Cache-Control: no-cache
|
225
|
+
<- Pragma: no-cache
|
226
|
+
<- Expires: -1
|
227
|
+
<- Access-Control-Expose-Headers: Location
|
228
|
+
<- Location: https://jsonplaceholder.typicode.com/posts/101
|
229
|
+
<- X-Content-Type-Options: nosniff
|
230
|
+
<- Etag: W/"1f-sBekL1M+V8GEMnkCGs539pAhjpU"
|
231
|
+
<- Via: 1.1 vegur
|
232
|
+
<- Cf-Cache-Status: DYNAMIC
|
233
|
+
<- Server: cloudflare
|
234
|
+
<- Cf-Ray: 8a637c24ee9b83a2-MXP
|
235
|
+
<- Alt-Svc: h3=":443"; ma=86400
|
236
|
+
<- Length: 31 Body: {
|
237
|
+
"foo": "bar",
|
238
|
+
"id": 101
|
239
|
+
}
|
240
|
+
I, [2024-07-20T17:01:43.774717 #38292] INFO -- : MintHttp Log (https://jsonplaceholder.typicode.com/todos/1)
|
241
|
+
@@ Timeouts: 5, 5, 20
|
242
|
+
@@ Time: 619605.878 -> 619606.057 connecting: 0.179 total: 0.698 seconds
|
243
|
+
@@ TLS: TLSv1.3 Cipher: TLS_AES_256_GCM_SHA384
|
244
|
+
-> POST /todos/1 HTTP/1.1
|
245
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
246
|
+
-> Accept: application/json
|
247
|
+
-> User-Agent: Mint Http
|
248
|
+
-> Host: jsonplaceholder.typicode.com
|
249
|
+
-> Content-Type: application/json
|
250
|
+
-> Content-Length: 13
|
251
|
+
-> {"foo":"bar"}
|
252
|
+
=======
|
253
|
+
<- Response: HTTP/1.1 404 Not Found
|
254
|
+
<- Date: Sat, 20 Jul 2024 14:01:43 GMT
|
255
|
+
<- Content-Type: application/json; charset=utf-8
|
256
|
+
<- Content-Length: 2
|
257
|
+
<- Connection: keep-alive
|
258
|
+
<- Report-To: {"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1721484103&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=b4Wm3JpEawzMn3h85DNdBHYfHUie%2BeyhfNXaCcm4ybI%3D"}]}
|
259
|
+
<- Reporting-Endpoints: heroku-nel=https://nel.heroku.com/reports?ts=1721484103&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=b4Wm3JpEawzMn3h85DNdBHYfHUie%2BeyhfNXaCcm4ybI%3D
|
260
|
+
<- Nel: {"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}
|
261
|
+
<- X-Powered-By: Express
|
262
|
+
<- X-Ratelimit-Limit: 1000
|
263
|
+
<- X-Ratelimit-Remaining: 998
|
264
|
+
<- X-Ratelimit-Reset: 1721484152
|
265
|
+
<- Vary: Origin, X-HTTP-Method-Override, Accept-Encoding
|
266
|
+
<- Access-Control-Allow-Credentials: true
|
267
|
+
<- Cache-Control: no-cache
|
268
|
+
<- Pragma: no-cache
|
269
|
+
<- Expires: -1
|
270
|
+
<- X-Content-Type-Options: nosniff
|
271
|
+
<- Etag: W/"2-vyGp6PvFo4RvsFtPoIWeCReyIC8"
|
272
|
+
<- Via: 1.1 vegur
|
273
|
+
<- Cf-Cache-Status: DYNAMIC
|
274
|
+
<- Server: cloudflare
|
275
|
+
<- Cf-Ray: 8a637c1e4a94ba8c-MXP
|
276
|
+
<- Alt-Svc: h3=":443"; ma=86400
|
277
|
+
<- Length: 2 Body: {}
|
278
|
+
I, [2024-07-20T17:01:42.133289 #38292] INFO -- : MintHttp Log (https://example.com)
|
279
|
+
@@ Timeouts: 5, 5, 20
|
280
|
+
@@ Time: 619604.234 -> 619604.717 connecting: 0.482 total: 0.701 seconds
|
281
|
+
@@ TLS: TLSv1.3 Cipher: TLS_AES_256_GCM_SHA384
|
282
|
+
-> POST HTTP/1.1
|
283
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
284
|
+
-> Accept: application/json
|
285
|
+
-> User-Agent: Mint Http
|
286
|
+
-> Host: example.com
|
287
|
+
-> Content-Type: application/json
|
288
|
+
-> Content-Length: 13
|
289
|
+
-> {"foo":"bar"}
|
290
|
+
=======
|
291
|
+
<- Response: HTTP/1.1 200 OK
|
292
|
+
<- Accept-Ranges: bytes
|
293
|
+
<- Cache-Control: max-age=604800
|
294
|
+
<- Content-Type: text/html; charset=UTF-8
|
295
|
+
<- Date: Sat, 20 Jul 2024 14:01:42 GMT
|
296
|
+
<- Etag: "3147526947"
|
297
|
+
<- Expires: Sat, 27 Jul 2024 14:01:42 GMT
|
298
|
+
<- Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
|
299
|
+
<- Server: EOS (vny/044F)
|
300
|
+
<- Content-Length: 1256
|
301
|
+
<- Length: 1256 Body: <!doctype html>
|
302
|
+
<html>
|
303
|
+
<head>
|
304
|
+
<title>Example Domain</title>
|
305
|
+
|
306
|
+
<meta charset="utf-8" />
|
307
|
+
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
308
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
309
|
+
<style type="text/css">
|
310
|
+
body {
|
311
|
+
background-color: #f0f0f2;
|
312
|
+
margin: 0;
|
313
|
+
padding: 0;
|
314
|
+
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
315
|
+
|
316
|
+
}
|
317
|
+
div {
|
318
|
+
width: 600px;
|
319
|
+
margin: 5em auto;
|
320
|
+
padding: 2em;
|
321
|
+
background-color: #fdfdff;
|
322
|
+
border-radius: 0.5em;
|
323
|
+
box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
|
324
|
+
}
|
325
|
+
a:link, a:visited {
|
326
|
+
color: #38488f;
|
327
|
+
text-decoration: none;
|
328
|
+
}
|
329
|
+
@media (max-width: 700px) {
|
330
|
+
div {
|
331
|
+
margin: 0 auto;
|
332
|
+
width: auto;
|
333
|
+
}
|
334
|
+
}
|
335
|
+
</style>
|
336
|
+
</head>
|
337
|
+
|
338
|
+
<body>
|
339
|
+
<div>
|
340
|
+
<h1>Example Domain</h1>
|
341
|
+
<p>This domain is for use in illustrative examples in documents. You may use this
|
342
|
+
domain in literature without prior coordination or asking for permission.</p>
|
343
|
+
<p><a href="https://www.iana.org/domains/example">More information...</a></p>
|
344
|
+
</div>
|
345
|
+
</body>
|
346
|
+
</html>
|
347
|
+
I, [2024-07-20T17:03:13.605159 #38509] INFO -- : MintHttp Log (https://dashboard.moyasar.com)
|
348
|
+
@@ Timeouts: 5, 5, 20
|
349
|
+
@@ Time: 619696.021 -> 619696.301 connecting: 0.28 total: 0.385 seconds
|
350
|
+
@@ TLS: TLSv1.3 Cipher: TLS_AES_128_GCM_SHA256
|
351
|
+
-> POST HTTP/1.1
|
352
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
353
|
+
-> Accept: application/json
|
354
|
+
-> User-Agent: Mint Http
|
355
|
+
-> Host: dashboard.moyasar.com
|
356
|
+
-> Content-Type: application/json
|
357
|
+
-> Content-Length: 13
|
358
|
+
-> {"foo":"bar"}
|
359
|
+
=======
|
360
|
+
<- Response: HTTP/1.1 500 Internal Server Error
|
361
|
+
<- Date: Sat, 20 Jul 2024 14:03:13 GMT
|
362
|
+
<- Content-Type: text/plain; charset=utf-8
|
363
|
+
<- Transfer-Encoding: chunked
|
364
|
+
<- Connection: keep-alive
|
365
|
+
<- X-Request-Id: b83bb0ba-f745-432f-bea8-37ab094afc3d
|
366
|
+
<- X-Runtime: 0.003190
|
367
|
+
<- Vary: Accept-Encoding
|
368
|
+
<- Strict-Transport-Security: max-age=63072000; includeSubDomains
|
369
|
+
<- Length: 182 Body: 500 Internal Server Error
|
370
|
+
If you are the administrator of this website, then please read this web application's log file and/or the web server's log file to find out what went wrong.
|
371
|
+
I, [2024-07-20T17:03:12.774798 #38509] INFO -- : MintHttp Log (https://api.moyasar.com)
|
372
|
+
@@ Timeouts: 5, 5, 20
|
373
|
+
@@ Time: 619695.17 -> 619695.469 connecting: 0.299 total: 0.406 seconds
|
374
|
+
@@ TLS: TLSv1.2 Cipher: ECDHE-RSA-AES128-GCM-SHA256
|
375
|
+
-> POST HTTP/1.1
|
376
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
377
|
+
-> Accept: application/json
|
378
|
+
-> User-Agent: Mint Http
|
379
|
+
-> Host: api.moyasar.com
|
380
|
+
-> Content-Type: application/json
|
381
|
+
-> Content-Length: 13
|
382
|
+
-> {"foo":"bar"}
|
383
|
+
=======
|
384
|
+
<- Response: HTTP/1.1 404 Not Found
|
385
|
+
<- Date: Sat, 20 Jul 2024 14:03:12 GMT
|
386
|
+
<- Content-Type: application/json; charset=utf-8
|
387
|
+
<- Content-Length: 91
|
388
|
+
<- Connection: keep-alive
|
389
|
+
<- X-Frame-Options: SAMEORIGIN
|
390
|
+
<- X-Xss-Protection: 0
|
391
|
+
<- X-Content-Type-Options: nosniff
|
392
|
+
<- X-Download-Options: noopen
|
393
|
+
<- X-Permitted-Cross-Domain-Policies: none
|
394
|
+
<- Referrer-Policy: strict-origin-when-cross-origin
|
395
|
+
<- X-Request-Id: 84cd8953-824a-4906-82ee-1a980d613dcf
|
396
|
+
<- X-Runtime: 0.005813
|
397
|
+
<- Strict-Transport-Security: max-age=63072000; includeSubDomains
|
398
|
+
<- Vary: Origin
|
399
|
+
<- Length: 91 Body: {
|
400
|
+
"type": "invalid_request_error",
|
401
|
+
"message": "Resource not found",
|
402
|
+
"errors": null
|
403
|
+
}
|
404
|
+
I, [2024-07-20T17:03:16.172324 #38509] INFO -- : MintHttp Log (https://ipinfo.com/1.1.1.1)
|
405
|
+
@@ Timeouts: 5, 5, 20
|
406
|
+
@@ Time: 619697.104 -> 619698.655 connecting: 1.551 total: 1.87 seconds
|
407
|
+
@@ TLS: TLSv1.3 Cipher: TLS_AES_256_GCM_SHA384
|
408
|
+
-> POST /1.1.1.1 HTTP/1.1
|
409
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
410
|
+
-> Accept: application/json
|
411
|
+
-> User-Agent: Mint Http
|
412
|
+
-> Host: ipinfo.com
|
413
|
+
-> Content-Type: application/json
|
414
|
+
-> Content-Length: 13
|
415
|
+
-> {"foo":"bar"}
|
416
|
+
=======
|
417
|
+
<- Response: HTTP/1.1 404 Not Found
|
418
|
+
<- Date: Sat, 20 Jul 2024 14:03:16 GMT
|
419
|
+
<- Server: Apache
|
420
|
+
<- Content-Length: 315
|
421
|
+
<- Content-Type: text/html; charset=iso-8859-1
|
422
|
+
<- Length: 315 Body: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
423
|
+
<html><head>
|
424
|
+
<title>404 Not Found</title>
|
425
|
+
</head><body>
|
426
|
+
<h1>Not Found</h1>
|
427
|
+
<p>The requested URL was not found on this server.</p>
|
428
|
+
<p>Additionally, a 404 Not Found
|
429
|
+
error was encountered while trying to use an ErrorDocument to handle the request.</p>
|
430
|
+
</body></html>
|
431
|
+
I, [2024-07-20T17:03:16.760845 #38509] INFO -- : MintHttp Log (https://jsonplaceholder.typicode.com/todos)
|
432
|
+
@@ Timeouts: 5, 5, 20
|
433
|
+
@@ Time: 619698.974 -> 619699.16 connecting: 0.186 total: 0.588 seconds
|
434
|
+
@@ TLS: TLSv1.3 Cipher: TLS_AES_256_GCM_SHA384
|
435
|
+
-> POST /todos HTTP/1.1
|
436
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
437
|
+
-> Accept: application/json
|
438
|
+
-> User-Agent: Mint Http
|
439
|
+
-> Host: jsonplaceholder.typicode.com
|
440
|
+
-> Content-Type: application/json
|
441
|
+
-> Content-Length: 13
|
442
|
+
-> {"foo":"bar"}
|
443
|
+
=======
|
444
|
+
<- Response: HTTP/1.1 201 Created
|
445
|
+
<- Date: Sat, 20 Jul 2024 14:03:16 GMT
|
446
|
+
<- Content-Type: application/json; charset=utf-8
|
447
|
+
<- Content-Length: 31
|
448
|
+
<- Connection: keep-alive
|
449
|
+
<- Report-To: {"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1721484196&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=tM%2FBbHTq57%2BsNunb7rnddrY6QyUOMANVCb6RtLjfM1g%3D"}]}
|
450
|
+
<- Reporting-Endpoints: heroku-nel=https://nel.heroku.com/reports?ts=1721484196&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=tM%2FBbHTq57%2BsNunb7rnddrY6QyUOMANVCb6RtLjfM1g%3D
|
451
|
+
<- Nel: {"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}
|
452
|
+
<- X-Powered-By: Express
|
453
|
+
<- X-Ratelimit-Limit: 1000
|
454
|
+
<- X-Ratelimit-Remaining: 999
|
455
|
+
<- X-Ratelimit-Reset: 1721484212
|
456
|
+
<- Vary: Origin, X-HTTP-Method-Override, Accept-Encoding
|
457
|
+
<- Access-Control-Allow-Credentials: true
|
458
|
+
<- Cache-Control: no-cache
|
459
|
+
<- Pragma: no-cache
|
460
|
+
<- Expires: -1
|
461
|
+
<- Access-Control-Expose-Headers: Location
|
462
|
+
<- Location: https://jsonplaceholder.typicode.com/todos/201
|
463
|
+
<- X-Content-Type-Options: nosniff
|
464
|
+
<- Etag: W/"1f-v7q09ihdcrnA2mAxihAAQHEaYaQ"
|
465
|
+
<- Via: 1.1 vegur
|
466
|
+
<- Cf-Cache-Status: DYNAMIC
|
467
|
+
<- Server: cloudflare
|
468
|
+
<- Cf-Ray: 8a637e642d124c46-MXP
|
469
|
+
<- Alt-Svc: h3=":443"; ma=86400
|
470
|
+
<- Length: 31 Body: {
|
471
|
+
"foo": "bar",
|
472
|
+
"id": 201
|
473
|
+
}
|
474
|
+
I, [2024-07-20T17:03:13.218866 #38509] INFO -- : MintHttp Log (https://api.moyasar.com/v1/payments)
|
475
|
+
@@ Timeouts: 5, 5, 20
|
476
|
+
@@ Time: 619695.592 -> 619695.914 connecting: 0.322 total: 0.428 seconds
|
477
|
+
@@ TLS: TLSv1.2 Cipher: ECDHE-RSA-AES128-GCM-SHA256
|
478
|
+
-> POST /v1/payments HTTP/1.1
|
479
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
480
|
+
-> Accept: application/json
|
481
|
+
-> User-Agent: Mint Http
|
482
|
+
-> Host: api.moyasar.com
|
483
|
+
-> Content-Type: application/json
|
484
|
+
-> Content-Length: 13
|
485
|
+
-> {"foo":"bar"}
|
486
|
+
=======
|
487
|
+
<- Response: HTTP/1.1 401 Unauthorized
|
488
|
+
<- Date: Sat, 20 Jul 2024 14:03:13 GMT
|
489
|
+
<- Content-Type: application/json; charset=utf-8
|
490
|
+
<- Content-Length: 91
|
491
|
+
<- Connection: keep-alive
|
492
|
+
<- X-Frame-Options: SAMEORIGIN
|
493
|
+
<- X-Xss-Protection: 0
|
494
|
+
<- X-Content-Type-Options: nosniff
|
495
|
+
<- X-Download-Options: noopen
|
496
|
+
<- X-Permitted-Cross-Domain-Policies: none
|
497
|
+
<- Referrer-Policy: strict-origin-when-cross-origin
|
498
|
+
<- Www-Authenticate: Basic realm="Application"
|
499
|
+
<- Cache-Control: no-cache
|
500
|
+
<- X-Request-Id: 77826288-0720-4b84-9c86-0079a2f79ab3
|
501
|
+
<- X-Runtime: 0.004735
|
502
|
+
<- Strict-Transport-Security: max-age=63072000; includeSubDomains
|
503
|
+
<- Vary: Origin
|
504
|
+
<- Length: 91 Body: {"type":"authentication_error","message":"Invalid authorization credentials","errors":null}
|
505
|
+
I, [2024-07-20T17:03:17.220251 #38509] INFO -- : MintHttp Log (https://jsonplaceholder.typicode.com/todos/1)
|
506
|
+
@@ Timeouts: 5, 5, 20
|
507
|
+
@@ Time: 619699.563 -> 619699.731 connecting: 0.169 total: 0.459 seconds
|
508
|
+
@@ TLS: TLSv1.3 Cipher: TLS_AES_256_GCM_SHA384
|
509
|
+
-> POST /todos/1 HTTP/1.1
|
510
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
511
|
+
-> Accept: application/json
|
512
|
+
-> User-Agent: Mint Http
|
513
|
+
-> Host: jsonplaceholder.typicode.com
|
514
|
+
-> Content-Type: application/json
|
515
|
+
-> Content-Length: 13
|
516
|
+
-> {"foo":"bar"}
|
517
|
+
=======
|
518
|
+
<- Response: HTTP/1.1 404 Not Found
|
519
|
+
<- Date: Sat, 20 Jul 2024 14:03:17 GMT
|
520
|
+
<- Content-Type: application/json; charset=utf-8
|
521
|
+
<- Content-Length: 2
|
522
|
+
<- Connection: keep-alive
|
523
|
+
<- Report-To: {"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1721484197&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=Jk6%2B0Z%2FbwSrMcljiDfaEWMOCwl2BpuLPEFla3gach%2B8%3D"}]}
|
524
|
+
<- Reporting-Endpoints: heroku-nel=https://nel.heroku.com/reports?ts=1721484197&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=Jk6%2B0Z%2FbwSrMcljiDfaEWMOCwl2BpuLPEFla3gach%2B8%3D
|
525
|
+
<- Nel: {"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}
|
526
|
+
<- X-Powered-By: Express
|
527
|
+
<- X-Ratelimit-Limit: 1000
|
528
|
+
<- X-Ratelimit-Remaining: 998
|
529
|
+
<- X-Ratelimit-Reset: 1721484212
|
530
|
+
<- Vary: Origin, X-HTTP-Method-Override, Accept-Encoding
|
531
|
+
<- Access-Control-Allow-Credentials: true
|
532
|
+
<- Cache-Control: no-cache
|
533
|
+
<- Pragma: no-cache
|
534
|
+
<- Expires: -1
|
535
|
+
<- X-Content-Type-Options: nosniff
|
536
|
+
<- Etag: W/"2-vyGp6PvFo4RvsFtPoIWeCReyIC8"
|
537
|
+
<- Via: 1.1 vegur
|
538
|
+
<- Cf-Cache-Status: DYNAMIC
|
539
|
+
<- Server: cloudflare
|
540
|
+
<- Cf-Ray: 8a637e67bd835a43-MXP
|
541
|
+
<- Alt-Svc: h3=":443"; ma=86400
|
542
|
+
<- Length: 2 Body: {}
|
543
|
+
I, [2024-07-20T17:03:14.301120 #38509] INFO -- : MintHttp Log (https://example.com)
|
544
|
+
@@ Timeouts: 5, 5, 20
|
545
|
+
@@ Time: 619696.408 -> 619696.884 connecting: 0.476 total: 0.695 seconds
|
546
|
+
@@ TLS: TLSv1.3 Cipher: TLS_AES_256_GCM_SHA384
|
547
|
+
-> POST HTTP/1.1
|
548
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
549
|
+
-> Accept: application/json
|
550
|
+
-> User-Agent: Mint Http
|
551
|
+
-> Host: example.com
|
552
|
+
-> Content-Type: application/json
|
553
|
+
-> Content-Length: 13
|
554
|
+
-> {"foo":"bar"}
|
555
|
+
=======
|
556
|
+
<- Response: HTTP/1.1 200 OK
|
557
|
+
<- Accept-Ranges: bytes
|
558
|
+
<- Cache-Control: max-age=604800
|
559
|
+
<- Content-Type: text/html; charset=UTF-8
|
560
|
+
<- Date: Sat, 20 Jul 2024 14:03:14 GMT
|
561
|
+
<- Etag: "3147526947"
|
562
|
+
<- Expires: Sat, 27 Jul 2024 14:03:14 GMT
|
563
|
+
<- Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
|
564
|
+
<- Server: EOS (vny/044F)
|
565
|
+
<- Content-Length: 1256
|
566
|
+
<- Length: 1256 Body: <!doctype html>
|
567
|
+
<html>
|
568
|
+
<head>
|
569
|
+
<title>Example Domain</title>
|
570
|
+
|
571
|
+
<meta charset="utf-8" />
|
572
|
+
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
573
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
574
|
+
<style type="text/css">
|
575
|
+
body {
|
576
|
+
background-color: #f0f0f2;
|
577
|
+
margin: 0;
|
578
|
+
padding: 0;
|
579
|
+
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
580
|
+
|
581
|
+
}
|
582
|
+
div {
|
583
|
+
width: 600px;
|
584
|
+
margin: 5em auto;
|
585
|
+
padding: 2em;
|
586
|
+
background-color: #fdfdff;
|
587
|
+
border-radius: 0.5em;
|
588
|
+
box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
|
589
|
+
}
|
590
|
+
a:link, a:visited {
|
591
|
+
color: #38488f;
|
592
|
+
text-decoration: none;
|
593
|
+
}
|
594
|
+
@media (max-width: 700px) {
|
595
|
+
div {
|
596
|
+
margin: 0 auto;
|
597
|
+
width: auto;
|
598
|
+
}
|
599
|
+
}
|
600
|
+
</style>
|
601
|
+
</head>
|
602
|
+
|
603
|
+
<body>
|
604
|
+
<div>
|
605
|
+
<h1>Example Domain</h1>
|
606
|
+
<p>This domain is for use in illustrative examples in documents. You may use this
|
607
|
+
domain in literature without prior coordination or asking for permission.</p>
|
608
|
+
<p><a href="https://www.iana.org/domains/example">More information...</a></p>
|
609
|
+
</div>
|
610
|
+
</body>
|
611
|
+
</html>
|
612
|
+
I, [2024-07-20T17:03:17.748015 #38509] INFO -- : MintHttp Log (https://jsonplaceholder.typicode.com/posts/1)
|
613
|
+
@@ Timeouts: 5, 5, 20
|
614
|
+
@@ Time: 619700.023 -> 619700.2 connecting: 0.177 total: 0.526 seconds
|
615
|
+
@@ TLS: TLSv1.3 Cipher: TLS_AES_256_GCM_SHA384
|
616
|
+
-> POST /posts/1 HTTP/1.1
|
617
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
618
|
+
-> Accept: application/json
|
619
|
+
-> User-Agent: Mint Http
|
620
|
+
-> Host: jsonplaceholder.typicode.com
|
621
|
+
-> Content-Type: application/json
|
622
|
+
-> Content-Length: 13
|
623
|
+
-> {"foo":"bar"}
|
624
|
+
=======
|
625
|
+
<- Response: HTTP/1.1 404 Not Found
|
626
|
+
<- Date: Sat, 20 Jul 2024 14:03:17 GMT
|
627
|
+
<- Content-Type: application/json; charset=utf-8
|
628
|
+
<- Content-Length: 2
|
629
|
+
<- Connection: keep-alive
|
630
|
+
<- Report-To: {"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1721484197&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=Jk6%2B0Z%2FbwSrMcljiDfaEWMOCwl2BpuLPEFla3gach%2B8%3D"}]}
|
631
|
+
<- Reporting-Endpoints: heroku-nel=https://nel.heroku.com/reports?ts=1721484197&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=Jk6%2B0Z%2FbwSrMcljiDfaEWMOCwl2BpuLPEFla3gach%2B8%3D
|
632
|
+
<- Nel: {"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}
|
633
|
+
<- X-Powered-By: Express
|
634
|
+
<- X-Ratelimit-Limit: 1000
|
635
|
+
<- X-Ratelimit-Remaining: 997
|
636
|
+
<- X-Ratelimit-Reset: 1721484212
|
637
|
+
<- Vary: Origin, X-HTTP-Method-Override, Accept-Encoding
|
638
|
+
<- Access-Control-Allow-Credentials: true
|
639
|
+
<- Cache-Control: no-cache
|
640
|
+
<- Pragma: no-cache
|
641
|
+
<- Expires: -1
|
642
|
+
<- X-Content-Type-Options: nosniff
|
643
|
+
<- Etag: W/"2-vyGp6PvFo4RvsFtPoIWeCReyIC8"
|
644
|
+
<- Via: 1.1 vegur
|
645
|
+
<- Cf-Cache-Status: DYNAMIC
|
646
|
+
<- Server: cloudflare
|
647
|
+
<- Cf-Ray: 8a637e6aaac20d64-MXP
|
648
|
+
<- Alt-Svc: h3=":443"; ma=86400
|
649
|
+
<- Length: 2 Body: {}
|
650
|
+
I, [2024-07-20T17:03:18.272730 #38509] INFO -- : MintHttp Log (https://jsonplaceholder.typicode.com/posts)
|
651
|
+
@@ Timeouts: 5, 5, 20
|
652
|
+
@@ Time: 619700.551 -> 619700.725 connecting: 0.174 total: 0.523 seconds
|
653
|
+
@@ TLS: TLSv1.3 Cipher: TLS_AES_256_GCM_SHA384
|
654
|
+
-> POST /posts HTTP/1.1
|
655
|
+
-> Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
656
|
+
-> Accept: application/json
|
657
|
+
-> User-Agent: Mint Http
|
658
|
+
-> Host: jsonplaceholder.typicode.com
|
659
|
+
-> Content-Type: application/json
|
660
|
+
-> Content-Length: 13
|
661
|
+
-> {"foo":"bar"}
|
662
|
+
=======
|
663
|
+
<- Response: HTTP/1.1 201 Created
|
664
|
+
<- Date: Sat, 20 Jul 2024 14:03:18 GMT
|
665
|
+
<- Content-Type: application/json; charset=utf-8
|
666
|
+
<- Content-Length: 31
|
667
|
+
<- Connection: keep-alive
|
668
|
+
<- Report-To: {"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1721484198&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=dBxS26JOHwx7%2BNDSjKkei5MCYIR0VkgOLm9jUXNq4ZU%3D"}]}
|
669
|
+
<- Reporting-Endpoints: heroku-nel=https://nel.heroku.com/reports?ts=1721484198&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=dBxS26JOHwx7%2BNDSjKkei5MCYIR0VkgOLm9jUXNq4ZU%3D
|
670
|
+
<- Nel: {"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}
|
671
|
+
<- X-Powered-By: Express
|
672
|
+
<- X-Ratelimit-Limit: 1000
|
673
|
+
<- X-Ratelimit-Remaining: 996
|
674
|
+
<- X-Ratelimit-Reset: 1721484212
|
675
|
+
<- Vary: Origin, X-HTTP-Method-Override, Accept-Encoding
|
676
|
+
<- Access-Control-Allow-Credentials: true
|
677
|
+
<- Cache-Control: no-cache
|
678
|
+
<- Pragma: no-cache
|
679
|
+
<- Expires: -1
|
680
|
+
<- Access-Control-Expose-Headers: Location
|
681
|
+
<- Location: https://jsonplaceholder.typicode.com/posts/101
|
682
|
+
<- X-Content-Type-Options: nosniff
|
683
|
+
<- Etag: W/"1f-sBekL1M+V8GEMnkCGs539pAhjpU"
|
684
|
+
<- Via: 1.1 vegur
|
685
|
+
<- Cf-Cache-Status: DYNAMIC
|
686
|
+
<- Server: cloudflare
|
687
|
+
<- Cf-Ray: 8a637e6dff40bafd-MXP
|
688
|
+
<- Alt-Svc: h3=":443"; ma=86400
|
689
|
+
<- Length: 31 Body: {
|
690
|
+
"foo": "bar",
|
691
|
+
"id": 101
|
692
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Net
|
4
|
+
class HTTP
|
5
|
+
def buffered_socket
|
6
|
+
@socket
|
7
|
+
end
|
8
|
+
|
9
|
+
def underlying_tcp_socket
|
10
|
+
socket = @socket&.io
|
11
|
+
|
12
|
+
if socket.is_a?(OpenSSL::SSL::SSLSocket)
|
13
|
+
socket = socket.io
|
14
|
+
end
|
15
|
+
|
16
|
+
socket
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -65,6 +65,13 @@ class MintHttp::NetHttpFactory
|
|
65
65
|
net_http.key = options[:key]
|
66
66
|
net_http.verify_mode = options[:verify_mode]
|
67
67
|
net_http.verify_hostname = options[:verify_hostname]
|
68
|
+
net_http.min_version = options[:min_version]
|
69
|
+
net_http.max_version = options[:max_version]
|
70
|
+
|
71
|
+
# Keep-alive Options
|
72
|
+
# Keep-alive timeout is made 1 month to allow maximum connection time
|
73
|
+
# since persistent connection management is handled by MintHttp::Pool
|
74
|
+
net_http.keep_alive_timeout = 2_592_000
|
68
75
|
|
69
76
|
if OpenSSL::X509::Store === options[:ca]
|
70
77
|
net_http.cert_store = options[:ca]
|
data/lib/mint_http/pool.rb
CHANGED
@@ -6,6 +6,7 @@ class MintHttp::Pool
|
|
6
6
|
attr_reader :timeout
|
7
7
|
attr_reader :size
|
8
8
|
attr_reader :usage_limit
|
9
|
+
attr_reader :created_connections
|
9
10
|
|
10
11
|
def initialize(options = {})
|
11
12
|
@mutex = Mutex.new
|
@@ -16,6 +17,7 @@ class MintHttp::Pool
|
|
16
17
|
|
17
18
|
@size = options[:size] || 10
|
18
19
|
@usage_limit = options[:usage_limit] || 100
|
20
|
+
@created_connections = 0
|
19
21
|
|
20
22
|
@pool = []
|
21
23
|
end
|
@@ -43,6 +45,9 @@ class MintHttp::Pool
|
|
43
45
|
client = net_factory.make_client(hostname, port, options)
|
44
46
|
entry = append(client, namespace)
|
45
47
|
entry.acquire!
|
48
|
+
|
49
|
+
@created_connections += 1
|
50
|
+
|
46
51
|
return entry.client
|
47
52
|
end
|
48
53
|
end
|
@@ -69,6 +74,10 @@ class MintHttp::Pool
|
|
69
74
|
end
|
70
75
|
end
|
71
76
|
|
77
|
+
def current_size
|
78
|
+
@mutex.synchronize { @pool.length }
|
79
|
+
end
|
80
|
+
|
72
81
|
private
|
73
82
|
|
74
83
|
def append(client, namespace)
|
data/lib/mint_http/pool_entry.rb
CHANGED
@@ -16,7 +16,6 @@ class MintHttp::PoolEntry
|
|
16
16
|
@birth_time = time_ms
|
17
17
|
@last_used = time_ms
|
18
18
|
@usage = 0
|
19
|
-
@unhealthy = false
|
20
19
|
end
|
21
20
|
|
22
21
|
def matches?(other)
|
@@ -50,18 +49,20 @@ class MintHttp::PoolEntry
|
|
50
49
|
end
|
51
50
|
|
52
51
|
def available?
|
53
|
-
!@acquired && !expired? &&
|
52
|
+
!@acquired && !expired? && healthy?
|
54
53
|
end
|
55
54
|
|
56
55
|
def healthy?
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
56
|
+
socket = client.underlying_tcp_socket
|
57
|
+
unless socket
|
58
|
+
return false
|
59
|
+
end
|
60
|
+
|
61
|
+
!socket.closed? && !(socket.wait_readable(0) && client.buffered_socket.eof?)
|
61
62
|
end
|
62
63
|
|
63
64
|
def to_clean?
|
64
|
-
(expired? ||
|
65
|
+
(expired? || !healthy?) && !@acquired
|
65
66
|
end
|
66
67
|
|
67
68
|
private
|
data/lib/mint_http/request.rb
CHANGED
@@ -23,6 +23,8 @@ module MintHttp
|
|
23
23
|
attr_reader :proxy_port
|
24
24
|
attr_reader :ssl_verify_mode
|
25
25
|
attr_reader :ssl_verify_hostname
|
26
|
+
attr_reader :ssl_min_version
|
27
|
+
attr_reader :ssl_max_version
|
26
28
|
|
27
29
|
# Attributes only available when request is made
|
28
30
|
attr_reader :method
|
@@ -48,6 +50,8 @@ module MintHttp
|
|
48
50
|
@proxy_pass = nil
|
49
51
|
@ssl_verify_mode = nil
|
50
52
|
@ssl_verify_hostname = nil
|
53
|
+
@ssl_min_version = nil
|
54
|
+
@ssl_max_version = nil
|
51
55
|
|
52
56
|
@logger = MintHttp.config.logger
|
53
57
|
@filter_params_list = MintHttp.config.filter_params_list
|
@@ -89,6 +93,12 @@ module MintHttp
|
|
89
93
|
self
|
90
94
|
end
|
91
95
|
|
96
|
+
def ssl_version(min, max)
|
97
|
+
@ssl_min_version = min
|
98
|
+
@ssl_max_version = max
|
99
|
+
self
|
100
|
+
end
|
101
|
+
|
92
102
|
def use_ca(ca)
|
93
103
|
@ca = ca
|
94
104
|
self
|
@@ -273,10 +283,12 @@ module MintHttp
|
|
273
283
|
logger.log_start
|
274
284
|
|
275
285
|
begin
|
276
|
-
|
286
|
+
response = with_client(url.hostname, url.port, options) do |http|
|
277
287
|
logger.log_connected
|
278
288
|
logger.log_connection_info(http)
|
279
|
-
http.request(net_request)
|
289
|
+
net_response = http.request(net_request)
|
290
|
+
|
291
|
+
Response.new(net_response, net_request, self, http)
|
280
292
|
end
|
281
293
|
rescue StandardError => error
|
282
294
|
logger.log_end
|
@@ -287,9 +299,6 @@ module MintHttp
|
|
287
299
|
end
|
288
300
|
|
289
301
|
logger.log_end
|
290
|
-
|
291
|
-
response = Response.new(res, net_request, self)
|
292
|
-
|
293
302
|
logger.log_response(response)
|
294
303
|
logger.put_timing(response)
|
295
304
|
logger.write_log
|
@@ -416,6 +425,8 @@ module MintHttp
|
|
416
425
|
proxy_pass: @proxy_pass,
|
417
426
|
verify_mode: @ssl_verify_mode,
|
418
427
|
verify_hostname: @ssl_verify_hostname,
|
428
|
+
min_version: @ssl_min_version,
|
429
|
+
max_version: @ssl_max_version,
|
419
430
|
}
|
420
431
|
|
421
432
|
[url, net_request, options]
|
data/lib/mint_http/response.rb
CHANGED
@@ -30,16 +30,39 @@ module MintHttp
|
|
30
30
|
# @return [Hash<String,Array[String]>]
|
31
31
|
attr_reader :headers
|
32
32
|
|
33
|
+
# @!attribute [r] time_started
|
34
|
+
# @return [Numeric]
|
33
35
|
attr_accessor :time_started
|
36
|
+
|
37
|
+
# @!attribute [r] time_ended
|
38
|
+
# @return [Numeric]
|
34
39
|
attr_accessor :time_ended
|
40
|
+
|
41
|
+
# @!attribute [r] time_connected
|
42
|
+
# @return [Numeric]
|
35
43
|
attr_accessor :time_connected
|
44
|
+
|
45
|
+
# @!attribute [r] time_total
|
46
|
+
# @return [Numeric]
|
36
47
|
attr_accessor :time_total
|
48
|
+
|
49
|
+
# @!attribute [r] time_connecting
|
50
|
+
# @return [Numeric]
|
37
51
|
attr_accessor :time_connecting
|
38
52
|
|
53
|
+
# @!attribute [r] local_address
|
54
|
+
# @return [Addrinfo]
|
55
|
+
attr_reader :local_address
|
56
|
+
|
57
|
+
# @!attribute [r] remote_address
|
58
|
+
# @return [Addrinfo]
|
59
|
+
attr_reader :remote_address
|
60
|
+
|
39
61
|
# @param [Net::HTTPResponse] net_response
|
40
62
|
# @param [Net::HTTPRequest] net_request
|
41
63
|
# @param [MintHttp::Request] mint_request
|
42
|
-
|
64
|
+
# @param [Net::HTTP]
|
65
|
+
def initialize(net_response, net_request, mint_request, net_http)
|
43
66
|
@net_response = net_response
|
44
67
|
@net_request = net_request
|
45
68
|
@mint_request = mint_request
|
@@ -47,6 +70,10 @@ module MintHttp
|
|
47
70
|
@status_code = net_response.code.to_i
|
48
71
|
@status_text = net_response.message
|
49
72
|
@headers = Headers.new.merge(net_response.each_header.to_h)
|
73
|
+
|
74
|
+
tcp_socket = net_http.underlying_tcp_socket
|
75
|
+
@local_address = tcp_socket.local_address rescue nil
|
76
|
+
@remote_address = tcp_socket.remote_address rescue nil
|
50
77
|
end
|
51
78
|
|
52
79
|
def success?
|
data/lib/mint_http/version.rb
CHANGED
data/lib/mint_http.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mint_http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ali Alhoshaiyan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-http
|
@@ -108,10 +108,12 @@ files:
|
|
108
108
|
- LICENSE.txt
|
109
109
|
- README.md
|
110
110
|
- Rakefile
|
111
|
+
- http.log
|
111
112
|
- lib/mint_http.rb
|
112
113
|
- lib/mint_http/config.rb
|
113
114
|
- lib/mint_http/errors.rb
|
114
115
|
- lib/mint_http/headers.rb
|
116
|
+
- lib/mint_http/net_http.rb
|
115
117
|
- lib/mint_http/net_http_factory.rb
|
116
118
|
- lib/mint_http/pool.rb
|
117
119
|
- lib/mint_http/pool_entry.rb
|
@@ -141,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
143
|
- !ruby/object:Gem::Version
|
142
144
|
version: '0'
|
143
145
|
requirements: []
|
144
|
-
rubygems_version: 3.
|
146
|
+
rubygems_version: 3.5.11
|
145
147
|
signing_key:
|
146
148
|
specification_version: 4
|
147
149
|
summary: A small fluent HTTP client.
|