tilia-http 4.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 +7 -0
- data/.gitignore +19 -0
- data/.rspec +1 -0
- data/.rubocop.yml +35 -0
- data/.simplecov +4 -0
- data/.travis.yml +3 -0
- data/CHANGELOG.sabre.md +235 -0
- data/CONTRIBUTING.md +25 -0
- data/Gemfile +18 -0
- data/Gemfile.lock +69 -0
- data/LICENSE +27 -0
- data/LICENSE.sabre +27 -0
- data/README.md +68 -0
- data/Rakefile +17 -0
- data/examples/asyncclient.rb +45 -0
- data/examples/basicauth.rb +39 -0
- data/examples/client.rb +20 -0
- data/examples/reverseproxy.rb +39 -0
- data/examples/stringify.rb +37 -0
- data/lib/tilia/http/auth/abstract_auth.rb +51 -0
- data/lib/tilia/http/auth/aws.rb +191 -0
- data/lib/tilia/http/auth/basic.rb +43 -0
- data/lib/tilia/http/auth/bearer.rb +37 -0
- data/lib/tilia/http/auth/digest.rb +187 -0
- data/lib/tilia/http/auth.rb +12 -0
- data/lib/tilia/http/client.rb +452 -0
- data/lib/tilia/http/client_exception.rb +15 -0
- data/lib/tilia/http/client_http_exception.rb +37 -0
- data/lib/tilia/http/http_exception.rb +21 -0
- data/lib/tilia/http/message.rb +241 -0
- data/lib/tilia/http/message_decorator_trait.rb +183 -0
- data/lib/tilia/http/message_interface.rb +154 -0
- data/lib/tilia/http/request.rb +235 -0
- data/lib/tilia/http/request_decorator.rb +160 -0
- data/lib/tilia/http/request_interface.rb +126 -0
- data/lib/tilia/http/response.rb +164 -0
- data/lib/tilia/http/response_decorator.rb +58 -0
- data/lib/tilia/http/response_interface.rb +36 -0
- data/lib/tilia/http/sapi.rb +165 -0
- data/lib/tilia/http/url_util.rb +70 -0
- data/lib/tilia/http/util.rb +51 -0
- data/lib/tilia/http/version.rb +9 -0
- data/lib/tilia/http.rb +416 -0
- data/test/http/auth/aws_test.rb +189 -0
- data/test/http/auth/basic_test.rb +60 -0
- data/test/http/auth/bearer_test.rb +47 -0
- data/test/http/auth/digest_test.rb +141 -0
- data/test/http/client_mock.rb +101 -0
- data/test/http/client_test.rb +331 -0
- data/test/http/message_decorator_test.rb +67 -0
- data/test/http/message_test.rb +163 -0
- data/test/http/request_decorator_test.rb +87 -0
- data/test/http/request_test.rb +132 -0
- data/test/http/response_decorator_test.rb +28 -0
- data/test/http/response_test.rb +38 -0
- data/test/http/sapi_mock.rb +12 -0
- data/test/http/sapi_test.rb +133 -0
- data/test/http/url_util_test.rb +155 -0
- data/test/http/util_test.rb +186 -0
- data/test/http_test.rb +102 -0
- data/test/test_helper.rb +6 -0
- data/tilia-http.gemspec +18 -0
- metadata +192 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: df3c33252c3cc85f15f3f9e6acea2826940586a3
|
4
|
+
data.tar.gz: 56395b01fc8257318fded5fc26f3e1850ca4c116
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: df86049b2ae6d5b492addf9a2d0c49682b2696280e42bb6b7aa1e12be21531c5eb28c07f28f823d8cf8a57d28332bb1b25eb4ed9c43d789b760af6166e471831
|
7
|
+
data.tar.gz: 7e7655183e6859a16ad274fd455fc75d24e52645a83a1c8a279ecde95629d1d40709557b43ec180be46ad59976c0ee2bae23b65ac354495b8fe6a634d0910acc
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# Disable metrics - we stick to the sabre coding
|
2
|
+
Metrics/AbcSize:
|
3
|
+
Enabled: false
|
4
|
+
|
5
|
+
Metrics/BlockNesting:
|
6
|
+
Enabled: false
|
7
|
+
|
8
|
+
Metrics/ClassLength:
|
9
|
+
Enabled: false
|
10
|
+
|
11
|
+
Metrics/ModuleLength:
|
12
|
+
Enabled: false
|
13
|
+
|
14
|
+
Metrics/CyclomaticComplexity:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Metrics/LineLength:
|
18
|
+
Enabled: false
|
19
|
+
|
20
|
+
Metrics/MethodLength:
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
Metrics/ParameterLists:
|
24
|
+
Enabled: false
|
25
|
+
|
26
|
+
Metrics/PerceivedComplexity:
|
27
|
+
Enabled: false
|
28
|
+
|
29
|
+
Style/OptionalArguments:
|
30
|
+
Enabled: false
|
31
|
+
|
32
|
+
# ['word', 'array'] looks better when aligned with other arrays that can't use
|
33
|
+
# %w() syntax
|
34
|
+
Style/WordArray:
|
35
|
+
Enabled: false
|
data/.simplecov
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.sabre.md
ADDED
@@ -0,0 +1,235 @@
|
|
1
|
+
ChangeLog
|
2
|
+
=========
|
3
|
+
|
4
|
+
4.1.0 (2015-09-04)
|
5
|
+
------------------
|
6
|
+
|
7
|
+
* The async client wouldn't `wait()` for new http requests being started
|
8
|
+
after the (previous) last request in the queue was resolved.
|
9
|
+
* Added `Sabre\HTTP\Auth\Bearer`, to easily extract a OAuth2 bearer token.
|
10
|
+
|
11
|
+
|
12
|
+
4.0.0 (2015-05-20)
|
13
|
+
------------------
|
14
|
+
|
15
|
+
* Deprecated: All static functions from `Sabre\HTTP\URLUtil` and
|
16
|
+
`Sabre\HTTP\Util` moved to a separate `functions.php`, which is also
|
17
|
+
autoloaded. The old functions are still there, but will be removed in a
|
18
|
+
future version. (#49)
|
19
|
+
|
20
|
+
|
21
|
+
4.0.0-alpha3 (2015-05-19)
|
22
|
+
-------------------------
|
23
|
+
|
24
|
+
* Added a parser for the HTTP `Prefer` header, as defined in [RFC7240][rfc7240].
|
25
|
+
* Deprecated `Sabre\HTTP\Util::parseHTTPDate`, use `Sabre\HTTP\parseDate()`.
|
26
|
+
* Deprecated `Sabre\HTTP\Util::toHTTPDate` use `Sabre\HTTP\toDate()`.
|
27
|
+
|
28
|
+
|
29
|
+
4.0.0-alpha2 (2015-05-18)
|
30
|
+
-------------------------
|
31
|
+
|
32
|
+
* #45: Don't send more data than what is promised in the HTTP content-length.
|
33
|
+
(@dratini0).
|
34
|
+
* #43: `getCredentials` returns null if incomplete. (@Hywan)
|
35
|
+
* #48: Now using php-cs-fixer to make our CS consistent (yay!)
|
36
|
+
* This includes fixes released in version 3.0.5.
|
37
|
+
|
38
|
+
|
39
|
+
4.0.0-alpha1 (2015-02-25)
|
40
|
+
-------------------------
|
41
|
+
|
42
|
+
* #41: Fixing bugs related to comparing URLs in `Request::getPath()`.
|
43
|
+
* #41: This library now uses the `sabre/uri` package for uri handling.
|
44
|
+
* Added `421 Misdirected Request` from the HTTP/2.0 spec.
|
45
|
+
|
46
|
+
|
47
|
+
3.0.5 (2015-05-11)
|
48
|
+
------------------
|
49
|
+
|
50
|
+
* #47 #35: When re-using the client and doing any request after a `HEAD`
|
51
|
+
request, the client discards the body.
|
52
|
+
|
53
|
+
|
54
|
+
3.0.4 (2014-12-10)
|
55
|
+
------------------
|
56
|
+
|
57
|
+
* #38: The Authentication helpers no longer overwrite any existing
|
58
|
+
`WWW-Authenticate` headers, but instead append new headers. This ensures
|
59
|
+
that multiple authentication systems can exist in the same environment.
|
60
|
+
|
61
|
+
|
62
|
+
3.0.3 (2014-12-03)
|
63
|
+
------------------
|
64
|
+
|
65
|
+
* Hiding `Authorization` header value from `Request::__toString`.
|
66
|
+
|
67
|
+
|
68
|
+
3.0.2 (2014-10-09)
|
69
|
+
------------------
|
70
|
+
|
71
|
+
* When parsing `Accept:` headers, we're ignoring invalid parts. Before we
|
72
|
+
would throw a PHP E_NOTICE.
|
73
|
+
|
74
|
+
|
75
|
+
3.0.1 (2014-09-29)
|
76
|
+
------------------
|
77
|
+
|
78
|
+
* Minor change in unittests.
|
79
|
+
|
80
|
+
|
81
|
+
3.0.0 (2014-09-23)
|
82
|
+
------------------
|
83
|
+
|
84
|
+
* `getHeaders()` now returns header values as an array, just like psr/http.
|
85
|
+
* Added `hasHeader()`.
|
86
|
+
|
87
|
+
|
88
|
+
2.1.0-alpha1 (2014-09-15)
|
89
|
+
-------------------------
|
90
|
+
|
91
|
+
* Changed: Copied most of the header-semantics for the PSR draft for
|
92
|
+
representing HTTP messages. [Reference here][psr-http].
|
93
|
+
* This means that `setHeaders()` does not wipe out every existing header
|
94
|
+
anymore.
|
95
|
+
* We also support multiple headers with the same name.
|
96
|
+
* Use `Request::getHeaderAsArray()` and `Response::getHeaderAsArray()` to
|
97
|
+
get a hold off multiple headers with the same name.
|
98
|
+
* If you use `getHeader()`, and there's more than 1 header with that name, we
|
99
|
+
concatenate all these with a comma.
|
100
|
+
* `addHeader()` will now preserve an existing header with that name, and add a
|
101
|
+
second header with the same name.
|
102
|
+
* The message class should be a lot faster now for looking up headers. No more
|
103
|
+
array traversal, because we maintain a tiny index.
|
104
|
+
* Added: `URLUtil::resolve()` to make resolving relative urls super easy.
|
105
|
+
* Switched to PSR-4.
|
106
|
+
* #12: Circumventing CURL's FOLLOW_LOCATION and doing it in PHP instead. This
|
107
|
+
fixes compatibility issues with people that have open_basedir turned on.
|
108
|
+
* Added: Content negotiation now correctly support mime-type parameters such as
|
109
|
+
charset.
|
110
|
+
* Changed: `Util::negotiate()` is now deprecated. Use
|
111
|
+
`Util::negotiateContentType()` instead.
|
112
|
+
* #14: The client now only follows http and https urls.
|
113
|
+
|
114
|
+
|
115
|
+
2.0.4 (2014-07-14)
|
116
|
+
------------------
|
117
|
+
|
118
|
+
* Changed: No longer escaping @ in urls when it's not needed.
|
119
|
+
* Fixed: #7: Client now correctly deals with responses without a body.
|
120
|
+
|
121
|
+
|
122
|
+
2.0.3 (2014-04-17)
|
123
|
+
------------------
|
124
|
+
|
125
|
+
* Now works on hhvm!
|
126
|
+
* Fixed: Now throwing an error when a Request object is being created with
|
127
|
+
arguments that were valid for sabre/http 1.0. Hopefully this will aid with
|
128
|
+
debugging for upgraders.
|
129
|
+
|
130
|
+
|
131
|
+
2.0.2 (2014-02-09)
|
132
|
+
------------------
|
133
|
+
|
134
|
+
* Fixed: Potential security problem in the client.
|
135
|
+
|
136
|
+
|
137
|
+
2.0.1 (2014-01-09)
|
138
|
+
------------------
|
139
|
+
|
140
|
+
* Fixed: getBodyAsString on an empty body now works.
|
141
|
+
* Fixed: Version string
|
142
|
+
|
143
|
+
|
144
|
+
2.0.0 (2014-01-08)
|
145
|
+
------------------
|
146
|
+
|
147
|
+
* Removed: Request::createFromPHPRequest. This is now handled by
|
148
|
+
Sapi::getRequest.
|
149
|
+
|
150
|
+
|
151
|
+
2.0.0alpha6 (2014-01-03)
|
152
|
+
------------------------
|
153
|
+
|
154
|
+
* Added: Asynchronous HTTP client. See examples/asyncclient.php.
|
155
|
+
* Fixed: Issue #4: Don't escape colon (:) when it's not needed.
|
156
|
+
* Fixed: Fixed a bug in the content negotation script.
|
157
|
+
* Fixed: Fallback for when CURLOPT_POSTREDIR is not defined (mainly for hhvm).
|
158
|
+
* Added: The Request and Response object now have a `__toString()` method that
|
159
|
+
serializes the objects into a standard HTTP message. This is mainly for
|
160
|
+
debugging purposes.
|
161
|
+
* Changed: Added Response::getStatusText(). This method returns the
|
162
|
+
human-readable HTTP status message. This part has been removed from
|
163
|
+
Response::getStatus(), which now always returns just the status code as an
|
164
|
+
int.
|
165
|
+
* Changed: Response::send() is now Sapi::sendResponse($response).
|
166
|
+
* Changed: Request::createFromPHPRequest is now Sapi::getRequest().
|
167
|
+
* Changed: Message::getBodyAsStream and Message::getBodyAsString were added. The
|
168
|
+
existing Message::getBody changed it's behavior, so be careful.
|
169
|
+
|
170
|
+
|
171
|
+
2.0.0alpha5 (2013-11-07)
|
172
|
+
------------------------
|
173
|
+
|
174
|
+
* Added: HTTP Status 451 Unavailable For Legal Reasons. Fight government
|
175
|
+
censorship!
|
176
|
+
* Added: Ability to catch and retry http requests in the client when a curl
|
177
|
+
error occurs.
|
178
|
+
* Changed: Request::getPath does not return the query part of the url, so
|
179
|
+
everything after the ? is stripped.
|
180
|
+
* Added: a reverse proxy example.
|
181
|
+
|
182
|
+
|
183
|
+
2.0.0alpha4 (2013-08-07)
|
184
|
+
------------------------
|
185
|
+
|
186
|
+
* Fixed: Doing a GET request with the client uses the last used HTTP method
|
187
|
+
instead.
|
188
|
+
* Added: HttpException
|
189
|
+
* Added: The Client class can now automatically emit exceptions when HTTP errors
|
190
|
+
occurred.
|
191
|
+
|
192
|
+
|
193
|
+
2.0.0alpha3 (2013-07-24)
|
194
|
+
------------------------
|
195
|
+
|
196
|
+
* Changed: Now depends on sabre/event package.
|
197
|
+
* Changed: setHeaders() now overwrites any existing http headers.
|
198
|
+
* Added: getQueryParameters to RequestInterface.
|
199
|
+
* Added: Util::negotiate.
|
200
|
+
* Added: RequestDecorator, ResponseDecorator.
|
201
|
+
* Added: A very simple HTTP client.
|
202
|
+
* Added: addHeaders() to append a list of new headers.
|
203
|
+
* Fixed: Not erroring on unknown HTTP status codes.
|
204
|
+
* Fixed: Throwing exceptions on invalid HTTP status codes (not 3 digits).
|
205
|
+
* Fixed: Much better README.md
|
206
|
+
* Changed: getBody() now uses a bitfield to specify what type to return.
|
207
|
+
|
208
|
+
|
209
|
+
2.0.0alpha2 (2013-07-02)
|
210
|
+
------------------------
|
211
|
+
|
212
|
+
* Added: Digest & AWS Authentication.
|
213
|
+
* Added: Message::getHttpVersion and Message::setHttpVersion.
|
214
|
+
* Added: Request::setRawServerArray, getRawServerValue.
|
215
|
+
* Added: Request::createFromPHPRequest
|
216
|
+
* Added: Response::send
|
217
|
+
* Added: Request::getQueryParameters
|
218
|
+
* Added: Utility for dealing with HTTP dates.
|
219
|
+
* Added: Request::setPostData and Request::getPostData.
|
220
|
+
* Added: Request::setAbsoluteUrl and Request::getAbsoluteUrl.
|
221
|
+
* Added: URLUtil, methods for calculation relative and base urls.
|
222
|
+
* Removed: Response::sendBody
|
223
|
+
|
224
|
+
|
225
|
+
2.0.0alpha1 (2012-10-07)
|
226
|
+
------------------------
|
227
|
+
|
228
|
+
* Fixed: Lots of small naming improvements
|
229
|
+
* Added: Introduction of Message, MessageInterface, Response, ResponseInterface.
|
230
|
+
|
231
|
+
Before 2.0.0, this package was built-into SabreDAV, where it first appeared in
|
232
|
+
January 2009.
|
233
|
+
|
234
|
+
[psr-http]: https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md
|
235
|
+
[rfc-7240]: http://tools.ietf.org/html/rfc7240
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
This project adheres to the [Open Code of Conduct][code-of-conduct]. By participating, you are expected to honor this code.
|
4
|
+
[code-of-conduct]: http://todogroup.org/opencodeofconduct/#tilia-http/tilia@jakobsack.de
|
5
|
+
|
6
|
+
This library is a port of [sabre/http](http://github.com/fruux/sabre-http). The ruby code should match the php code as good as possible. For more information refer to the [coding guidelines](https://tilia.github.io/coding_guidelines).
|
7
|
+
|
8
|
+
If you are having an issue [search the open issues](https://github.com/tilia/tilia-http/issues) or create an issue and we'll help point you in the right direction.
|
9
|
+
|
10
|
+
## Submitting a Pull Request
|
11
|
+
|
12
|
+
* Fork the project on Github
|
13
|
+
* Install development dependencies (`bundle install`)
|
14
|
+
* Create a topic branch for your changes
|
15
|
+
* Ensure that you provide *documentation* and *test coverage* for your changes (patches won't be accepted without)
|
16
|
+
* Ensure that all tests pass (`bundle exec rake`)
|
17
|
+
* Create a [pull request](https://github.com/tilia/tilia-http/pulls) on Github (these are also a great place to start a conversation around a patch as early as possible)
|
18
|
+
|
19
|
+
## Testing
|
20
|
+
|
21
|
+
To run the tests:
|
22
|
+
|
23
|
+
$ rake
|
24
|
+
|
25
|
+
If nothing complains, congratulations!
|
data/Gemfile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Internal dependencies
|
4
|
+
gem 'tilia-event', '~> 2.0'
|
5
|
+
gem 'tilia-uri', '~> 1.0'
|
6
|
+
|
7
|
+
# External dependencies
|
8
|
+
gem 'activesupport', '~> 4.2'
|
9
|
+
gem 'typhoeus', '~> 0.8'
|
10
|
+
gem 'rchardet', '~>1.6'
|
11
|
+
gem 'rack', '~> 1.6'
|
12
|
+
|
13
|
+
# Testing
|
14
|
+
gem 'rake'
|
15
|
+
gem 'minitest', '~> 5.8'
|
16
|
+
gem 'simplecov', '~> 0.10'
|
17
|
+
gem 'rubocop', '~> 0.34'
|
18
|
+
gem 'yard', '~> 0.8'
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activesupport (4.2.5)
|
5
|
+
i18n (~> 0.7)
|
6
|
+
json (~> 1.7, >= 1.7.7)
|
7
|
+
minitest (~> 5.1)
|
8
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
9
|
+
tzinfo (~> 1.1)
|
10
|
+
ast (2.1.0)
|
11
|
+
astrolabe (1.3.1)
|
12
|
+
parser (~> 2.2)
|
13
|
+
docile (1.1.5)
|
14
|
+
ethon (0.8.0)
|
15
|
+
ffi (>= 1.3.0)
|
16
|
+
ffi (1.9.10)
|
17
|
+
i18n (0.7.0)
|
18
|
+
json (1.8.3)
|
19
|
+
minitest (5.8.3)
|
20
|
+
parser (2.2.3.0)
|
21
|
+
ast (>= 1.1, < 3.0)
|
22
|
+
powerpack (0.1.1)
|
23
|
+
rack (1.6.4)
|
24
|
+
rainbow (2.0.0)
|
25
|
+
rake (10.4.2)
|
26
|
+
rchardet (1.6.1)
|
27
|
+
rubocop (0.35.1)
|
28
|
+
astrolabe (~> 1.3)
|
29
|
+
parser (>= 2.2.3.0, < 3.0)
|
30
|
+
powerpack (~> 0.1)
|
31
|
+
rainbow (>= 1.99.1, < 3.0)
|
32
|
+
ruby-progressbar (~> 1.7)
|
33
|
+
tins (<= 1.6.0)
|
34
|
+
ruby-progressbar (1.7.5)
|
35
|
+
simplecov (0.11.1)
|
36
|
+
docile (~> 1.1.0)
|
37
|
+
json (~> 1.8)
|
38
|
+
simplecov-html (~> 0.10.0)
|
39
|
+
simplecov-html (0.10.0)
|
40
|
+
thread_safe (0.3.5)
|
41
|
+
tilia-event (2.0.2)
|
42
|
+
activesupport (~> 4.2)
|
43
|
+
tilia-uri (1.0.1)
|
44
|
+
activesupport (~> 4.2)
|
45
|
+
tins (1.6.0)
|
46
|
+
typhoeus (0.8.0)
|
47
|
+
ethon (>= 0.8.0)
|
48
|
+
tzinfo (1.2.2)
|
49
|
+
thread_safe (~> 0.1)
|
50
|
+
yard (0.8.7.6)
|
51
|
+
|
52
|
+
PLATFORMS
|
53
|
+
ruby
|
54
|
+
|
55
|
+
DEPENDENCIES
|
56
|
+
activesupport (~> 4.2)
|
57
|
+
minitest (~> 5.8)
|
58
|
+
rack (~> 1.6)
|
59
|
+
rake
|
60
|
+
rchardet (~> 1.6)
|
61
|
+
rubocop (~> 0.34)
|
62
|
+
simplecov (~> 0.10)
|
63
|
+
tilia-event (~> 2.0)
|
64
|
+
tilia-uri (~> 1.0)
|
65
|
+
typhoeus (~> 0.8)
|
66
|
+
yard (~> 0.8)
|
67
|
+
|
68
|
+
BUNDLED WITH
|
69
|
+
1.10.6
|
data/LICENSE
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
Copyright (C) 2015 Jakob Sack (tilia@jakobsack.de)
|
2
|
+
|
3
|
+
All rights reserved.
|
4
|
+
|
5
|
+
Redistribution and use in source and binary forms, with or without modification,
|
6
|
+
are permitted provided that the following conditions are met:
|
7
|
+
|
8
|
+
* Redistributions of source code must retain the above copyright notice,
|
9
|
+
this list of conditions and the following disclaimer.
|
10
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
11
|
+
this list of conditions and the following disclaimer in the documentation
|
12
|
+
and/or other materials provided with the distribution.
|
13
|
+
* Neither the name Tilia nor the names of its contributors
|
14
|
+
may be used to endorse or promote products derived from this software
|
15
|
+
without specific prior written permission.
|
16
|
+
|
17
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
18
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
19
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
20
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
21
|
+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
22
|
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
23
|
+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
24
|
+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
25
|
+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
26
|
+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27
|
+
POSSIBILITY OF SUCH DAMAGE.
|
data/LICENSE.sabre
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
Copyright (C) 2009-2015 fruux GmbH (https://fruux.com/)
|
2
|
+
|
3
|
+
All rights reserved.
|
4
|
+
|
5
|
+
Redistribution and use in source and binary forms, with or without modification,
|
6
|
+
are permitted provided that the following conditions are met:
|
7
|
+
|
8
|
+
* Redistributions of source code must retain the above copyright notice,
|
9
|
+
this list of conditions and the following disclaimer.
|
10
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
11
|
+
this list of conditions and the following disclaimer in the documentation
|
12
|
+
and/or other materials provided with the distribution.
|
13
|
+
* Neither the name Sabre nor the names of its contributors
|
14
|
+
may be used to endorse or promote products derived from this software
|
15
|
+
without specific prior written permission.
|
16
|
+
|
17
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
18
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
19
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
20
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
21
|
+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
22
|
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
23
|
+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
24
|
+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
25
|
+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
26
|
+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27
|
+
POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
tilia/http
|
2
|
+
=========
|
3
|
+
|
4
|
+
[](https://travis-ci.org/tilia/tilia-http)
|
5
|
+
|
6
|
+
**tilia/http is a port of [sabre/http](https://github.com/fruux/sabre-http)**
|
7
|
+
|
8
|
+
The sabre/http library provides a toolkit to make working with the HTTP protocol easier.
|
9
|
+
|
10
|
+
Most PHP scripts run within a HTTP request but accessing information about the
|
11
|
+
HTTP request is cumbersome at least.
|
12
|
+
|
13
|
+
There's bad practices, inconsistencies and confusion. This library is
|
14
|
+
effectively a wrapper around the following PHP constructs:
|
15
|
+
|
16
|
+
For Input:
|
17
|
+
|
18
|
+
* `$_GET`,
|
19
|
+
* `$_POST`,
|
20
|
+
* `$_SERVER`,
|
21
|
+
* `php://input` or `$HTTP_RAW_POST_DATA`.
|
22
|
+
|
23
|
+
For output:
|
24
|
+
|
25
|
+
* `php://output` or `echo`,
|
26
|
+
* `header()`.
|
27
|
+
|
28
|
+
What this library provides, is a `Request` object, and a `Response` object.
|
29
|
+
|
30
|
+
The objects are extendable and easily mockable.
|
31
|
+
|
32
|
+
|
33
|
+
Installation
|
34
|
+
------------
|
35
|
+
|
36
|
+
Simply add tilia-http to your Gemfile and bundle it up:
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
gem 'tilia-http', '~> 4.1'
|
40
|
+
```
|
41
|
+
|
42
|
+
|
43
|
+
Changes to sabre/http
|
44
|
+
---------------------
|
45
|
+
|
46
|
+
```php
|
47
|
+
Sabre\HTTP\Message#setHeader($name, $value)
|
48
|
+
Sabre\HTTP\Message#setHeader(array $headers)
|
49
|
+
```
|
50
|
+
|
51
|
+
are replaced by
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
Tilia::Http::Message#update_header(name, value)
|
55
|
+
Tilia::Http::Message#update_headers(headers)
|
56
|
+
```
|
57
|
+
|
58
|
+
|
59
|
+
Contributing
|
60
|
+
------------
|
61
|
+
|
62
|
+
See [Contributing](CONTRIBUTING.md)
|
63
|
+
|
64
|
+
|
65
|
+
License
|
66
|
+
-------
|
67
|
+
|
68
|
+
tilia-http is licensed under the terms of the [three-clause BSD-license](LICENSE).
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rubocop/rake_task'
|
4
|
+
require 'yard'
|
5
|
+
|
6
|
+
Rake::TestTask.new do |t|
|
7
|
+
t.test_files = Dir.glob('test/**/*_test.rb')
|
8
|
+
t.libs << 'test'
|
9
|
+
end
|
10
|
+
RuboCop::RakeTask.new do |t|
|
11
|
+
t.options = ['--format', 'html', '--out', 'coverage/rubocop.html']
|
12
|
+
end
|
13
|
+
YARD::Rake::YardocTask.new do |t|
|
14
|
+
t.files = ['lib/**/*.rb', '-', 'README.md']
|
15
|
+
end
|
16
|
+
|
17
|
+
task(default: :test)
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This example demonstrates the ability for clients to work asynchronously.
|
3
|
+
#
|
4
|
+
# By default up to 10 requests will be executed in paralel. HTTP connections
|
5
|
+
# are re-used and DNS is cached, all thanks to the power of curl.
|
6
|
+
#
|
7
|
+
# @copyright Copyright (C) 2009-2015 fruux GmbH (https://fruux.com/).
|
8
|
+
# @author Evert Pot (http://evertpot.com/)
|
9
|
+
# @license http://sabre.io/license/ Modified BSD License
|
10
|
+
|
11
|
+
# Expected to be called "bundle exec examples/asyncclient.rb"
|
12
|
+
require './lib/tilia/http'
|
13
|
+
|
14
|
+
# This is the request we're repeating a 1000 times.
|
15
|
+
request = Tilia::Http::Request.new('GET', 'http://localhost/')
|
16
|
+
client = Tilia::Http::Client.new
|
17
|
+
|
18
|
+
1000.times do |i|
|
19
|
+
puts "#{i}\tsending"
|
20
|
+
|
21
|
+
# This is the 'success' callback
|
22
|
+
success = lambda do |response|
|
23
|
+
puts "#{i}\t#{response.status}"
|
24
|
+
end
|
25
|
+
|
26
|
+
# This is the 'error' callback. It is called for general connection
|
27
|
+
# problems (such as not being able to connect to a host, dns errors,
|
28
|
+
# etc.) and also cases where a response was returned, but it had a
|
29
|
+
# status code of 400 or higher.
|
30
|
+
exception = lambda do |error|
|
31
|
+
if error['status'] == Tilia::Http::Client::STATUS_CURLERROR
|
32
|
+
# Curl errors
|
33
|
+
puts "#{i}\tcurl error: #{error['curl_errmsg']}"
|
34
|
+
else
|
35
|
+
# HTTP errors
|
36
|
+
puts "#{i}\t#{error['response'].status}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
client.send_async(request, success, exception)
|
41
|
+
end
|
42
|
+
|
43
|
+
# After everything is done, we call 'wait'. This causes the client to wait for
|
44
|
+
# all outstanding http requests to complete.
|
45
|
+
client.wait
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This example does not work because of rack ...
|
3
|
+
# This example shows how to do Basic authentication.
|
4
|
+
# *
|
5
|
+
# @copyright Copyright (C) 2009-2015 fruux GmbH (https://fruux.com/).
|
6
|
+
# @author Evert Pot (http://evertpot.com/)
|
7
|
+
# @license http://sabre.io/license/ Modified BSD License
|
8
|
+
|
9
|
+
# Expected to be called "bundle exec examples/basicauth.rb"
|
10
|
+
require './lib/tilia_http'
|
11
|
+
require 'rack'
|
12
|
+
|
13
|
+
app = proc do |env|
|
14
|
+
user_list = {
|
15
|
+
'user1' => 'password',
|
16
|
+
'user2' => 'password'
|
17
|
+
}
|
18
|
+
|
19
|
+
sapi = Tilia::Http::Sapi.new(env)
|
20
|
+
request = sapi.request
|
21
|
+
response = Tilia::Http::Response.new
|
22
|
+
|
23
|
+
basic_auth = Tilia::Http::Auth::Basic.new('Locked down area', request, response)
|
24
|
+
if !(user_pass = basic_auth.credentials)
|
25
|
+
# No username or password given
|
26
|
+
basic_auth.require_login
|
27
|
+
elsif !user_list.key?(user_pass[0]) || user_list[user_pass[0]] != user_pass[1]
|
28
|
+
# Username or password are incorrect
|
29
|
+
basic_auth.require_login
|
30
|
+
else
|
31
|
+
# Success !
|
32
|
+
response.body = 'You are logged in!'
|
33
|
+
end
|
34
|
+
|
35
|
+
# Sending the response
|
36
|
+
sapi.send_response(response)
|
37
|
+
end
|
38
|
+
|
39
|
+
Rack::Handler::WEBrick.run app
|
data/examples/client.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This example shows how to make a HTTP request with the Request and Response
|
3
|
+
# objects.
|
4
|
+
#
|
5
|
+
# @copyright Copyright (C) 2009-2015 fruux GmbH (https://fruux.com/).
|
6
|
+
# @author Evert Pot (http://evertpot.com/)
|
7
|
+
# @license http://sabre.io/license/ Modified BSD License
|
8
|
+
|
9
|
+
# Expected to be called "bundle exec examples/client.rb"
|
10
|
+
require './lib/tilia_http'
|
11
|
+
|
12
|
+
# Constructing the request.
|
13
|
+
request = Tilia::Http::Request.new('GET', 'http://www.jakobsack.de/')
|
14
|
+
|
15
|
+
client = Tilia::Http::Client.new
|
16
|
+
# client.add_curl_setting(proxy: 'localhost:8888')
|
17
|
+
response = client.send(request)
|
18
|
+
|
19
|
+
puts 'Response:'
|
20
|
+
puts response.to_s
|