https://github.com/vinelab/http
A smart, simple and fault-tolerant HTTP client for sending and receiving JSON and XML
https://github.com/vinelab/http
fault-tolerance http http-client laravel php
Last synced: 10 months ago
JSON representation
A smart, simple and fault-tolerant HTTP client for sending and receiving JSON and XML
- Host: GitHub
- URL: https://github.com/vinelab/http
- Owner: Vinelab
- Created: 2013-05-30T15:32:34.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2019-09-25T08:25:17.000Z (over 6 years ago)
- Last Synced: 2024-05-05T10:02:52.743Z (over 1 year ago)
- Topics: fault-tolerance, http, http-client, laravel, php
- Language: PHP
- Homepage:
- Size: 57.6 KB
- Stars: 56
- Watchers: 13
- Forks: 30
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README

[](https://www.versioneye.com/user/projects/53efc9a613bb06cc6f0004b0)
[](https://insight.sensiolabs.com/projects/0663136a-6dde-4159-bc96-d1749599dca4)
# http://Client
A smart, simple and fault-tolerant HTTP client for sending and recieving JSON and XML.
## Installation
### Composer
`composer require vinelab/http`
```php
// change this to point correctly according
// to your folder structure.
require './vendor/autoload.php';
use Vinelab\Http\Client as HttpClient;
$client = new HttpClient;
$response = $client->get('echo.jsontest.com/key/value/something/here');
var_dump($response->json());
```
### Laravel
Edit **app.php** and add ```'Vinelab\Http\HttpServiceProvider',``` to the ```'providers'``` array.
It will automatically alias itself as **HttpClient** so no need to alias it in your **app.php**, unless you would like to customize it - in that case edit your **'aliases'** in **app.php** adding ``` 'MyHttp' => 'Vinelab\Http\Facades\Client',```
## Usage
### GET
#### Simple
```php
$response = HttpClient::get('http://example.org');
// raw content
$response->content();
```
#### With Params
```php
$request = [
'url' => 'http://somehost.net/something',
'params' => [
'id' => '12350ME1D',
'lang' => 'en-us',
'format' => 'rss_200'
]
];
$response = HttpClient::get($request);
// raw content
$response->content();
// in case of json
$response->json();
// XML
$response->xml();
```
### POST
```php
$request = [
'url' => 'http://somehost.net/somewhere',
'params' => [
'id' => '12350ME1D',
'lang' => 'en-us',
'format' => 'rss_200'
]
];
$response = HttpClient::post($request);
// raw content
$response->content();
// in case of json
$response->json();
// XML
$response->xml();
```
### Options
These options work with all requests.
#### Timeout
You can set the `timeout` option in order to specify the number of seconds that your request will fail, if not completed.
```php
$request = [
'url' => 'http://somehost.net/somewhere',
'params' => [
'id' => '12350ME1D',
'lang' => 'en-us',
'format' => 'rss_200'
],
'timeout' => 10
];
```
### Headers
```php
$response = HttpClient::get([
'url' => 'http://somehost.net/somewhere',
'headers' => ['Connection: close', 'Authorization: some-secret-here']
]);
// The full headers payload
$response->headers();
```
### Basic Auth
```php
$response = HttpClient::get([
'url' => 'http://somehost.net/somewhere',
'auth' => [
'username' => 'user',
'password' => 'pass'
],
'params' => [
'var1' => 'value1',
'var2' => 'value2'
]
]);
```
### Digest Auth
```php
$response = HttpClient::get([
'url' => 'http://some.where.url',
'digest' => [
'username' => 'user',
'password' => 'pass'
],
'params' => [
'var1' => 'value1',
'var2' => 'value2'
]
]);
```
### Enforce HTTP Version
```php
HttpClient::get(['version' => 1.1, 'url' => 'http://some.url']);
```
### Raw Content
```php
HttpClient::post(['url' => 'http://to.send.to', 'content' => 'Whatever content here may go!']);
```
#### Custom Query String
The content passed in the `content` key will be concatenated to the *URL* followed by a *?*
```php
HttpClient::get(['url' => 'http://my.url', 'content' => 'a=b&c=d']);
```
> It is pretty much the same process with different HTTP Verbs. Supports ``` GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD ```
## Fault Tolerance
Fault tolerance allows the request to be re-issued when it fails (i.e. timeout).
This is useful in cases such as Microservices: When a service is down and is being called by another service,
with fault tolerance the request will be re-issued in the hopes of the destination service being up again.
Issue a fault-tolerant request by setting the `tolerant` flag to `true` in the request. Also, specify
the time it should wait until it tries again with `timeUntilNextTry` (in seconds) and the number of tries
before it is considered a failure with `triesUntilFailure` (in seconds).
```php
$request = [
'url' => 'http://somehost.net/somewhere',
'params' => [
'id' => '12350ME1D',
'lang' => 'en-us',
'format' => 'rss_200'
],
'timeout' => 10
'tolerant' => true,
'timeUntilNextTry' => 1,
'triesUntilFailure' => 3
];
```
In case of timeout occurance, a `HttpClientRequestFailedException` will be thrown.
> **IMPORTANT! Notice**: In order to make use of fault tolerance option, you must specify the `timeout` parameter too.