ptcong / php-http-class
A simple and powerful Http Client library used for sending request and get response like a browser.
Requires
- php: >=5.0
README
This package is deprecated, please use EasyRequest instead of. It's newer and better.
Simple PHP Http Client
A simple Http library that inspired by PSR-7 and working with curl/socket for sending request.
Requirements
PHP needs to be a minimum version of PHP 5.0 with socket or curl enabled.
Installation
To install this library, install composer and issue the following command:
composer require "ptcong/php-http-class": "^3.0"
composer update
If your hosting is running with PHP 5.2, you should refer to this library: https://bitbucket.org/xrstf/composer-php52
Usage
First, you neeed to include composer autoloader.
require dirname(__FILE__).'/vendor/autoload.php';
- Create a client
- Options and Helper methods
- Some simple options (timeout, protocol version, user-agent, etc...)
- Send with headers
- Send with cookies
- Send with query string
- Send with form params
- Send with multipart data
- Upload a file
- Post RAW data
- Post JSON data
- Use HTTP/Sock proxy
- Use Auth basic
- Sending and get response
- Get send result
- Get response status code
- Get response text
- Get resonse cookies as string
- Get resonse cookies as array
- Get header lines as array of string
- Get response header lines as comma-separated string
- Get response headers as lines
- Get followed redirect urls, count, requests, cookies collection
- Get debug info
Create a client
$client = EasyRequest::create('GET', 'http://google.com'); // or $client = EasyRequest::create('http://google.com', 'GET'); $client = EasyRequest::create('http://google.com'); // default is GET
Create a client with default options
$method = 'POST'; // may GET/POST/PUT or any HTTP method $target = 'http://domain.com'; $request = EasyRequest::create($method, $target, array( 'handler' => null, // null|string - "socket" or "curl". null to use default. 'method' => 'GET', // string 'url' => null, // string 'nobody' => false, // boolean 'follow_redirects' => 0, // integer|true - True to follows all of redirections. 'protocol_version' => '1.1', // string 'timeout' => 10, // integer Timeout in seconds 'user_agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:38.0) Gecko/20100101 Firefox/38.0', 'auth' => null, // null|string An Auth Basic "user:password" 'proxy' => null, // null|string A proxy with format "ip:port" 'proxy_userpwd' => null, // null|string User password with format "user:password" 'proxy_type' => 'http', // string Must be one of "http" or "sock5" 'headers' => array(), // array 'cookies' => array(), // array 'json' => false, // false|string String json 'body' => '', // string|resource 'query' => array(), // array 'form_params' => array(), // array 'multipart' => array(), // array ))->send(); var_dump($request->getResponse()); // null if have errors occured while sending.
Options and Helper methods
This library provides two handlers for sending request are Socket and Curl. By default, the library will try to detect your PHP settings and request options what you set to give a handler. But if you perfer to use Socket or Curl, you can specify that by handler
option.
Socket is built in PHP, so you can use this library for sending request without curl extension.
$client = EasyRequest::create('POST', 'http://domain.com', array( 'handler' => 'socket' // or 'curl' ));
Shortcut methods to creating and sending request quickly
You can use all of HTTP methods as shortcut
$client = EasyRequest::post('http://domain.com', $options); $client = EasyRequest::get('http://domain.com', $options); $client = EasyRequest::put('http://domain.com', $options); $client = EasyRequest::delete('http://domain.com', $options); ...
Some simple options
$client ->withTimeout(10) // timeout of sending request ->withNobody(true) // specify that you only want to get headers ->withProtocolVersion('1.1') // HTTP protocol version ->withFollowRedirects(true) // true or an integer ->withUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:38.0) Gecko/20100101 Firefox/38.0');
With headers
$client = EasyRequest::create('POST', 'http://domain.com', array( 'headers' => array( 'Referer' => 'http://google.com', 'Header1' => 'value', 'Header2' => array( 'value2', 'value3' ) ) )) // to append value2 to Header1 ->withHeader('Header1', 'value2') // to replace value3 to Header1 ->withHeader('Header1', 'value3', flase) // to append value4, value5 to Header1 ->withHeader('Header1', array('value4', 'value5')) // to append value 7 to Header2, value6 to Header1 ->withHeader(array( 'Header1' => 'value6', 'Header2' => 'value7' ), null, true) // to remove a header by case-insensitive ->withoutHeader('header1');
With cookies
Use helper method to set dynamic values.
$client = EasyRequest::create('POST', 'http://domain.com', array( 'cookies' => array( array( 'Name' => 'cookie0', 'Value' => 'value0', 'Path' => '/', 'Max-Age' => 300, 'Expires' => time() + 86400, 'Secure' => false, 'Discard' => false, 'HttpOnly' => false ) ) )) // with default args ->withCookie('cookie1', 'value1', $path = '/', $secure = false, $httpOnly = false) ->withCookie('cookie2', 'value2') ->withCookie('cookie6=value6; expires=Fri, 26-Jun-2015 03:24:07 GMT') // Sets multiple cookies by string ->withStringCookies('cookie3=value3; cookie4=value4;cookie5=value5') // to remove a cookie by name ->withoutCookie('cookie1');
With query string
Query option similar to Form param option.
$client = EasyRequest::create('POST', 'http://domain.com', array( 'query' => array( 'query1' => 'value1', 'query2' => 'value2', 'query3' => 'value3', ) )) ->withQuery('query1', 'value2') ->withQuery('query2', 'value3', false) // to override query2 ->withQuery('query3=value3&query4=value4') ->withQuery(array( 'query5' => 'value5', 'query6' => 'value6' )) // to remove a query by name ->withoutQuery('query1');
With form params
$client = EasyRequest::create('POST', 'http://domain.com', array( 'form_params' => array( 'field1' => 'value1', 'field2' => array('value2', 'value3') 'field3' => array( 'nested1' => 1, 'nested2' => 2 ), 'field4' => array(1, 2) ) )) ->withFormParam('field1', 'value2') // field1 will be field1[]=value1&field1[]=value2 ->withFormParam('field1', 'value3', false) // field1 will be field1=value3 ->withFormParam('field5=value5&field6=value6&field7=value7') ->withFormParam(array( 'field8' => 'value8', 'field9' => 'value9' )); // to remove a form field by name ->withoutFormParam('field') // to see your data var_dump((string) $client->prepareRequest()->getBody());
With multipart data
Multipart field require name
and contents
keys. filename
and headers
are optional.
$client = EasyRequest::create('POST', 'http://domain.com', array( 'multipart' => array( array( 'name' => 'field1', 'contents' => 'value1' ), array( 'name' => 'field2', 'contents' => 'this is a text file', 'filename' => 'file.txt', 'headers' => array( 'Custom-Header' => 'abc' ) ), // may use to upload a file array( 'name' => 'field2', 'contents' => fopen('/path/to/file'), // optional keys 'filename' => 'file.jpg', 'headers' => array( 'Content-Type' => 'image/jpg' ) ) ) )) ->withMultipart('field2', 'value2') ->withMultipart('field3', 'value3', 'fieldname3') ->withMultipart('field4', 'value4', 'fieldname4', array('Custom-Header' => 'value')) ->withMultipart('file1', fopen('/path/to/file'), 'filename1') // to upload a file // to remove a part ->withoutMultipart('field2');
Upload a file.
$client ->withFormFile('file1', '/path/to/file1', $optionalFileName = null, $optionalHeaders = array()) ->withFormFile('file2', '/path/to/file2'); // to remove this file $client->withoutMultipart('file1');
Post RAW data
$client->withBody('raw data');
Post JSON data
Used to easily upload JSON encoded data as the body of a request. A Content-Type: application/json
header will be added if no Content-Type header is already present on the message.
$client->withJson(array(1,2,3)); // or $client->withJson(json_encode(array(1,2,3)));
With HTTP/ Sock5 Proxy
You may use a HTTP or Sock Proxy. But Sock Proxy require curl extension.
$client = EasyRequest::create('POST', 'http://domain.com', array( 'proxy' => '192.168.1.105:8888', 'proxy_userpwd' => 'user:pass', 'proxy_type' => 'http' // "http" or "sock5" )) $client->withProxy('192.168.1.105:8888'); // proxy without user pass, default is HTTP proxy $client->withProxy('192.168.1.105:8888', 'user:pass'); // use HTTP proxy with user, pass $client->withProxy('192.168.1.105:8888', null, 'sock5'); // use sock5 proxy $client->withSock5Proxy('192.168.1.105:8888', 'user:pass'); // use sock5 proxy $client->withHttpProxy('192.168.1.105:8888', 'user:pass'); // use http proxy
With Auth Basic
$client = EasyRequest::create('POST', 'http://domain.com', array( 'auth' => 'user:pass', )) $client->withAuth('user:pass');
Send request and get responses
$client->send(); var_dump($client->getResponse() !== null); boolean true
Get response status code
var_dump($client->getResponseStatus()); int 200
Get response reason
var_dump($client->getResponseReason()); string 'OK' (length=2)
Get response body text
var_dump($client->getResponseBody()); string 'Hello' (length=5) var_dump((string) $client); string 'Hello' (length=5)
Get response cookies as string
var_dump($client->getResponseCookies()); string 'c1=v1; c2=v2;' (length=13)
Get response cookies as array
var_dump($client->getResponseArrayCookies()); array (size=2) 0 => array (size=9) 'Name' => string 'c1' (length=2) 'Value' => string 'v1' (length=2) 'Domain' => null 'Path' => string '/' (length=1) 'Max-Age' => null 'Expires' => string 'Sun, 28-Jun-2015 11:13:07 GMT' (length=29) 'Secure' => boolean false 'Discard' => boolean false 'HttpOnly' => boolean false 1 => array (size=9) 'Name' => string 'c2' (length=2) 'Value' => string 'v2' (length=2) 'Domain' => string 'abc.com' (length=7) 'Path' => string '/Path/' (length=6) 'Max-Age' => null 'Expires' => string 'Sun, 28-Jun-2015 11:13:07 GMT' (length=29) 'Secure' => boolean true 'Discard' => boolean false 'HttpOnly' => boolean true
Get response header lines by specified name
var_dump($client->getResponseHeader('set-cookie')); // Case-insensitive array (size=2) 0 => string 'c1=v1; expires=Sun, 28-Jun-2015 11:13:48 GMT' (length=44) 1 => string 'c2=v2; expires=Sun, 28-Jun-2015 11:13:48 GMT; path=/Path/; domain=abc.com; secure; httponly' (length=91)
Get response header lines as comma-separated string
var_dump($client->getResponseHeaderLine('server')); string 'Apache' (length=6)
Get response headers as lines
var_dump($client->getResponseHeaders()); array (size=9) 0 => string 'Date: Sun, 28 Jun 2015 11:20:14 GMT' (length=35) 1 => string 'Server: Apache' (length=14) 2 => string 'X-Powered-By: PHP/5.2.17' (length=24) 3 => string 'Set-Cookie: c1=v1; expires=Sun, 28-Jun-2015 11:21:54 GMT' (length=56) 4 => string 'Set-Cookie: c2=v2; expires=Sun, 28-Jun-2015 11:21:54 GMT; path=/Path/; domain=abc.com; secure; httponly' (length=103) 5 => string 'Location: c.php' (length=15) 6 => string 'Content-Length: 0' (length=17) 7 => string 'Connection: close' (length=17) 8 => string 'Content-Type: text/html' (length=23)
Get followed redirect urls, count, requests, cookies collection
var_dump($client->getRedirectedCount()); var_dump($client->getRedirectedUrls()); // all cookies, may has some different sites var_dump($client->getRedirectedCookies()); // get all request details var_dump($client->getRedirectedRequests());
Get debug info
var_dump($client->getDebugInfo()); array (size=4) 'time_start' => float 1435488809.58 'time_process' => float 0.00152993202209 'handler' => string 'socket' (length=6) 'errors' => array (size=0) empty