On this page
Class HttpSocket
CakePHP network socket connection class.
Core base class for HTTP network communication. HttpSocket can be used as an Object Oriented replacement for cURL in many places.
- CakeSocket
- HttpSocket 
Copyright: Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
License: MIT License
Location: Cake/Network/Http/HttpSocket.php
Properties summary
- 
    $_authprotectedAuthentication settingsarray
- 
    $_contentResourceprotectedResource to receive the content of requestmixed
- 
    $_proxyprotectedProxy settingsarray
- 
    $configpublicConfiguration settings for the HttpSocket and the requestsarray
- 
    $quirksModepublicbooleanWhen one activates the $quirksMode by setting it to true, all checks meant to enforce RFC 2616 (HTTP/1.1 specs). will be disabled and additional measures to deal with non-standard responses will be enabled. 
- 
    $requestpublicContain information about the last request (read only)array
- 
    $responsepublicContain information about the last response (read only)array
- 
    $responseClasspublicResponse class namestring
Inherited Properties
- _baseConfig,- _connectionErrors,- _encryptMethods,- connected,- connection,- description,- encrypted,- lastError
Method Summary
- 
    __construct() publicBuild an HTTP Socket using the specified configuration.
- 
    _buildHeader() protectedBuilds the header.
- 
    _buildRequestLine() protectedBuilds a request line according to HTTP/1.1 specs. Activate quirks mode to work outside specs.
- 
    _buildUri() protectedTakes a $uri array and turns it into a fully qualified URL string
- 
    _configUri() protectedParses and sets the specified URI into current request configuration.
- 
    _escapeToken() protectedEscapes a given $token according to RFC 2616 (HTTP 1.1 specs)
- 
    _parseQuery() protectedThis function can be thought of as a reverse to PHP5's http_build_query(). It takes a given query string and turns it into an array and supports nesting by using the php bracket syntax. So this means you can parse queries like: 
- 
    _parseUri() protectedParses the given URI and breaks it down into pieces as an indexed array with elements such as 'scheme', 'port', 'query'. 
- 
    _setAuth() protectedSet authentication in request
- 
    _setProxy() protectedSet the proxy configuration and authentication
- 
    _tokenEscapeChars() protectedGets escape chars according to RFC 2616 (HTTP 1.1 specs).
- 
    buildCookies() publicBuilds cookie headers for a request.
- 
    configAuth() publicSet authentication settings.
- 
    configProxy() publicSet proxy settings
- 
    delete() publicIssues a DELETE request to the specified URI, query, and request.
- 
    get() publicIssues a GET request to the specified URI, query, and request.
- 
    head() publicIssues a HEAD request to the specified URI, query, and request.
- 
    patch() publicIssues a PATCH request to the specified URI, query, and request.
- 
    post() publicIssues a POST request to the specified URI, query, and request.
- 
    put() publicIssues a PUT request to the specified URI, query, and request.
- 
    request() publicIssue the specified request. HttpSocket::get() and HttpSocket::post() wrap this method and provide a more granular interface. 
- 
    reset() publicResets the state of this HttpSocket instance to it's initial state (before CakeObject::__construct got executed) or does the same thing partially for the request and the response property only. 
- 
    setContentResource() publicSet the resource to receive the request content. This resource must support fwrite.
- 
    url() publicNormalizes URLs into a $uriTemplate. If no template is provided a default one will be used. Will generate the URL using the current config information. 
Method Detail
__construct()source public
__construct( string|array $config array() )Build an HTTP Socket using the specified configuration.
You can use a URL string to set the URL and use default configurations for all other options:
$http = new HttpSocket('https://cakephp.org/');
Or use an array to configure multiple options:
$http = new HttpSocket(array(
   'host' => 'cakephp.org',
   'timeout' => 20
));See HttpSocket::$config for options that can be used.
Parameters
- 
     string|array $configoptional array()
- Configuration information, either a string URL or an array of options.
Overrides
CakeSocket::__construct()
  _buildHeader()source protected
_buildHeader( array $header , string $mode 'standard' )Builds the header.
Parameters
- 
     array $header
- Header to build
- 
     string $modeoptional 'standard'
- Mode
Returns
stringHeader built from array
_buildRequestLine()source protected
_buildRequestLine( array $request array() )Builds a request line according to HTTP/1.1 specs. Activate quirks mode to work outside specs.
Parameters
- 
     array $requestoptional array()
- Needs to contain a 'uri' key. Should also contain a 'method' key, otherwise defaults to GET.
Returns
stringRequest line
Throws
SocketException_buildUri()source protected
_buildUri( string|array $uri array() , string $uriTemplate '%scheme://%user:%pass@%host:%port/%path?%query#%fragment' )Takes a $uri array and turns it into a fully qualified URL string
Parameters
- 
     string|array $urioptional array()
- Either A $uri array, or a request string. Will use $this->config if left empty.
- 
     string $uriTemplateoptional '%scheme://%user:%pass@%host:%port/%path?%query#%fragment'
- The Uri template/format to use.
Returns
mixedA fully qualified URL formatted according to $uriTemplate, or false on failure
_configUri()source protected
_configUri( string|array $uri null )Parses and sets the specified URI into current request configuration.
Parameters
- 
     string|array $urioptional null
- URI, See HttpSocket::_parseUri()
Returns
booleanIf uri has merged in config
_escapeToken()source protected
_escapeToken( string $token , array $chars null )Escapes a given $token according to RFC 2616 (HTTP 1.1 specs)
Parameters
- 
     string $token
- Token to escape
- 
     array $charsoptional null
- Characters to escape
Returns
stringEscaped token
_parseQuery()source protected
_parseQuery( string|array $query )This function can be thought of as a reverse to PHP5's http_build_query(). It takes a given query string and turns it into an array and supports nesting by using the php bracket syntax. So this means you can parse queries like:
- ?key[subKey]=value
- ?key[]=value1&key[]=value2
A leading '?' mark in $query is optional and does not effect the outcome of this function. For the complete capabilities of this implementation take a look at HttpSocketTest::testparseQuery()
Parameters
- 
     string|array $query
- A query string to parse into an array or an array to return directly "as is"
Returns
arrayThe $query parsed into a possibly multi-level array. If an empty $query is given, an empty array is returned.
_parseUri()source protected
_parseUri( string|array $uri null , boolean|array $base array() )Parses the given URI and breaks it down into pieces as an indexed array with elements such as 'scheme', 'port', 'query'.
Parameters
- 
     string|array $urioptional null
- URI to parse
- 
     boolean|array $baseoptional array()
- If true use default URI config, otherwise indexed array to set 'scheme', 'host', 'port', etc.
Returns
arrayParsed URI
_setProxy()source protected
_setProxy( )Set the proxy configuration and authentication
Throws
SocketException_tokenEscapeChars()source protected
_tokenEscapeChars( boolean $hex true , array $chars null )Gets escape chars according to RFC 2616 (HTTP 1.1 specs).
Parameters
- 
     boolean $hexoptional true
- true to get them as HEX values, false otherwise
- 
     array $charsoptional null
- Characters to escape
Returns
arrayEscape chars
buildCookies()source public
buildCookies( array $cookies )Builds cookie headers for a request.
Cookies can either be in the format returned in responses, or a simple key => value pair.
Parameters
- 
     array $cookies
- Array of cookies to send with the request.
Returns
stringCookie header string to be sent with the request.
configAuth()source public
configAuth( string $method , string|array $user null , string $pass null )Set authentication settings.
Accepts two forms of parameters. If all you need is a username + password, as with Basic authentication you can do the following:
$http->configAuth('Basic', 'mark', 'secret');If you are using an authentication strategy that requires more inputs, like Digest authentication you can call configAuth() with an array of user information.
$http->configAuth('Digest', array(
    'user' => 'mark',
    'pass' => 'secret',
    'realm' => 'my-realm',
    'nonce' => 1235
));To remove any set authentication strategy, call configAuth() with no parameters:
$http->configAuth();
Parameters
- 
     string $method
- Authentication method (ie. Basic, Digest). If empty, disable authentication
- 
     string|array $useroptional null
- Username for authentication. Can be an array with settings to authentication class
- 
     string $passoptional null
- Password for authentication
configProxy()source public
configProxy( string|array $host , integer $port 3128 , string $method null , string $user null , string $pass null )Set proxy settings
Parameters
- 
     string|array $host
- Proxy host. Can be an array with settings to authentication class
- 
     integer $portoptional 3128
- Port. Default 3128.
- 
     string $methodoptional null
- Proxy method (ie, Basic, Digest). If empty, disable proxy authentication
- 
     string $useroptional null
- Username if your proxy need authentication
- 
     string $passoptional null
- Password to proxy authentication
delete()source public
delete( string|array $uri null , array $data array() , array $request array() )Issues a DELETE request to the specified URI, query, and request.
Parameters
- 
     string|array $urioptional null
- 
     URI to request (see HttpSocket::_parseUri())
- 
     array $dataoptional array()
- Array of request body data keys and values.
- 
     array $requestoptional array()
- An indexed array with indexes such as 'method' or uri
Returns
mixedResult of request
get()source public
get( string|array $uri null , array $query array() , array $request array() )Issues a GET request to the specified URI, query, and request.
Using a string uri and an array of query string parameters:
$response = $http->get('http://google.com/search', array('q' => 'cakephp', 'client' => 'safari'));
Would do a GET request to http://google.com/search?q=cakephp&client=safari
You could express the same thing using a uri array and query string parameters:
$response = $http->get(
    array('host' => 'google.com', 'path' => '/search'),
    array('q' => 'cakephp', 'client' => 'safari')
);Parameters
- 
     string|array $urioptional null
- URI to request. Either a string uri, or a uri array, see HttpSocket::_parseUri()
- 
     array $queryoptional array()
- Querystring parameters to append to URI
- 
     array $requestoptional array()
- An indexed array with indexes such as 'method' or uri
Returns
mixedResult of request, either false on failure or the response to the request.
head()source public
head( string|array $uri null , array $query array() , array $request array() )Issues a HEAD request to the specified URI, query, and request.
By definition HEAD request are identical to GET request except they return no response body. This means that all information and examples relevant to GET also applys to HEAD.
Parameters
- 
     string|array $urioptional null
- URI to request. Either a string URI, or a URI array, see HttpSocket::_parseUri()
- 
     array $queryoptional array()
- Querystring parameters to append to URI
- 
     array $requestoptional array()
- An indexed array with indexes such as 'method' or uri
Returns
mixedResult of request, either false on failure or the response to the request.
patch()source public
patch( string|array $uri null , array $data array() , array $request array() )Issues a PATCH request to the specified URI, query, and request.
Parameters
- 
     string|array $urioptional null
- URI to request, See HttpSocket::_parseUri()
- 
     array $dataoptional array()
- Array of request body data keys and values.
- 
     array $requestoptional array()
- An indexed array with indexes such as 'method' or uri
Returns
mixedResult of request
post()source public
post( string|array $uri null , array $data array() , array $request array() )Issues a POST request to the specified URI, query, and request.
post() can be used to post simple data arrays to a URL:
$response = $http->post('http://example.com', array(
    'username' => 'batman',
    'password' => 'bruce_w4yne'
));Parameters
- 
     string|array $urioptional null
- URI to request. See HttpSocket::_parseUri()
- 
     array $dataoptional array()
- Array of request body data keys and values.
- 
     array $requestoptional array()
- An indexed array with indexes such as 'method' or uri
Returns
mixedResult of request, either false on failure or the response to the request.
put()source public
put( string|array $uri null , array $data array() , array $request array() )Issues a PUT request to the specified URI, query, and request.
Parameters
- 
     string|array $urioptional null
- URI to request, See HttpSocket::_parseUri()
- 
     array $dataoptional array()
- Array of request body data keys and values.
- 
     array $requestoptional array()
- An indexed array with indexes such as 'method' or uri
Returns
mixedResult of request
request()source public
request( string|array $request array() )Issue the specified request. HttpSocket::get() and HttpSocket::post() wrap this method and provide a more granular interface.
Parameters
- 
     string|array $requestoptional array()
- Either an URI string, or an array defining host/uri
Returns
mixedfalse on error, HttpSocketResponse on success
Throws
SocketExceptionreset()source public
reset( boolean $full true )Resets the state of this HttpSocket instance to it's initial state (before CakeObject::__construct got executed) or does the same thing partially for the request and the response property only.
Parameters
- 
     boolean $fulloptional true
- If set to false only HttpSocket::response and HttpSocket::request are reset
Returns
booleanTrue on success
Overrides
CakeSocket::reset()
  setContentResource()source public
setContentResource( resource|boolean $resource )Set the resource to receive the request content. This resource must support fwrite.
Parameters
- 
     resource|boolean $resource
- Resource or false to disable the resource use
Throws
SocketExceptionurl()source public
url( string|array $url null , string $uriTemplate null )Normalizes URLs into a $uriTemplate. If no template is provided a default one will be used. Will generate the URL using the current config information.
Usage:
After configuring part of the request parameters, you can use url() to generate URLs.
$http = new HttpSocket('https://www.cakephp.org');
$url = $http->url('/search?q=bar');Would return https://cakephp.org/search?q=bar
url() can also be used with custom templates:
$url = $http->url('http://www.cakephp/search?q=socket', '/%path?%query');
Would return /search?q=socket.
Parameters
- 
     string|array $urloptional null
- Either a string or array of URL options to create a URL with.
- 
     string $uriTemplateoptional null
- A template string to use for URL formatting.
Returns
mixedEither false on failure or a string containing the composed URL.
Methods inherited from CakeSocket
_addTlsVersions()source protected
_addTlsVersions( )Add TLS versions that are dependent on specific PHP versions.
These TLS versions are not supported by older PHP versions, so we have to conditionally set them if they are supported.
As of PHP5.6.6, STREAM_CRYPTO_METHOD_TLS_CLIENT does not include TLS1.1 or 1.2. If we have TLS1.2 support we need to update the method map.
See
https://bugs.php.net/bug.php?id=69195https://github.com/php/php-src/commit/10bc5fd4c4c8e1dd57bd911b086e9872a56300a0
_connectionErrorHandler()source protected
_connectionErrorHandler( integer $code , string $message )socket_stream_client() does not populate errNum, or $errStr when there are connection errors, as in the case of SSL verification failure.
Instead we need to handle those errors manually.
Parameters
- 
     integer $code
- Code.
- 
     string $message
- Message.
_setSslContext()source protected
_setSslContext( string $host )Configure the SSL context options.
Parameters
- 
     string $host
- The host name being connected to.
address()source public
address( )Gets the IP address of the current connection.
Returns
stringIP address
addresses()source public
addresses( )Gets all IP addresses associated with the current connection.
Returns
arrayIP addresses
connect()source public
connect( )Connects the socket to the given host and port.
Returns
booleanSuccess
Throws
SocketExceptioncontext()source public
context( )Gets the connection context.
Returns
null|arrayNull when there is no connection, an array when there is.
disconnect()source public
disconnect( )Disconnects the socket from the current connection.
Returns
booleanSuccess
enableCrypto()source public
enableCrypto( string $type , string $clientOrServer 'client' , boolean $enable true )Encrypts current stream socket, using one of the defined encryption methods.
Parameters
- 
     string $type
- Type which can be one of 'sslv2', 'sslv3', 'sslv23', 'tls', 'tlsv1_1' or 'tlsv1_2'.
- 
     string $clientOrServeroptional 'client'
- Can be one of 'client', 'server'. Default is 'client'.
- 
     boolean $enableoptional true
- Enable or disable encryption. Default is true (enable)
Returns
booleanTrue on success
Throws
InvalidArgumentExceptionWhen an invalid encryption scheme is chosen.
SocketExceptionWhen attempting to enable SSL/TLS fails.
See
stream_socket_enable_cryptolastError()source public
lastError( )Gets the last error as a string.
Returns
string|nullLast error
read()source public
read( integer $length 1024 )Reads data from the socket. Returns false if no data is available or no connection could be established.
Parameters
- 
     integer $lengthoptional 1024
- Optional buffer length to read; defaults to 1024
Returns
mixedSocket data
setLastError()source public
setLastError( integer $errNum , string $errStr )Sets the last error.
Parameters
- 
     integer $errNum
- Error code
- 
     string $errStr
- Error string
write()source public
write( string $data )Writes data to the socket.
Parameters
- 
     string $data
- The data to write to the socket
Returns
booleanSuccess
Properties detail
$configsource
public array
Configuration settings for the HttpSocket and the requests
array(
    'persistent' => false,
    'host' => 'localhost',
    'protocol' => 'tcp',
    'port' => 80,
    'timeout' => 30,
    'ssl_verify_peer' => true,
    'ssl_allow_self_signed' => false,
    'ssl_verify_depth' => 5,
    'ssl_verify_host' => true,
    'request' => array(
        'uri' => array(
            'scheme' => array('http', 'https'),
            'host' => 'localhost',
            'port' => array(80, 443)
        ),
        'redirect' => false,
        'cookies' => array(),
    )
)$quirksModesource
public boolean
When one activates the $quirksMode by setting it to true, all checks meant to enforce RFC 2616 (HTTP/1.1 specs). will be disabled and additional measures to deal with non-standard responses will be enabled.
false$requestsource
public array
Contain information about the last request (read only)
array(
    'method' => 'GET',
    'uri' => array(
        'scheme' => 'http',
        'host' => null,
        'port' => 80,
        'user' => null,
        'pass' => null,
        'path' => null,
        'query' => null,
        'fragment' => null
    ),
    'version' => '1.1',
    'body' => '',
    'line' => null,
    'header' => array(
        'Connection' => 'close',
        'User-Agent' => 'CakePHP'
    ),
    'raw' => null,
    'redirect' => false,
    'cookies' => array(),
)© 2005–2017 The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
 https://api.cakephp.org/2.10/class-HttpSocket.html