<span>
</span>
<span>
class
</span><span> ExtendedCurl
{
</span><span>
</span>
<span>
const
</span> JSON_OBJECT = 0<span>;
</span><span>
</span>
<span>
const
</span> JSON_ARRAY = 1<span>;
</span><span>
</span>
<span>
private
</span> <span>
$curl
</span><span>;
</span><span>
</span>
<span>
private
</span> <span>
$options
</span> = <span>
array
</span><span>(
CURLOPT_FAILONERROR </span>=> <span>false</span>,<span>
CURLOPT_RETURNTRANSFER </span>=> <span>true</span>,<span>
CURLOPT_FOLLOWLOCATION </span>=> 1,<span>
CURLOPT_CONNECTTIMEOUT </span>=> 15,<span>
CURLOPT_TIMEOUT </span>=> 60,
<span>
<span> );
</span><span>
</span>
<span>
private
</span> <span>
$error
</span> = <span>null</span><span>;
</span><span>
</span>
<span>
private
</span> <span>
$httpCode
</span> = <span>null</span><span>;
</span><span>
</span>
<span>
public
</span> <span>
function
</span> __construct(<span>
array
</span> <span>
$defaultOptions
</span> = <span>
array
</span><span>())
{
</span><span>
$this
</span>->curl =<span> curl_init();
</span><span>
if
</span> (!<span>
empty
</span>(<span>
$defaultOptions
</span><span>)) {
</span><span>
$this
</span>->options = <span>
$defaultOptions
</span><span>;
}
}
</span><span>
</span>
<span>
public
</span> <span>
function
</span> setOptions(<span>
array
</span> <span>
$options
</span><span>)
{
</span><span>
foreach
</span> (<span>
$options
</span> <span>
as
</span> <span>
$key
</span> => <span>
$value
</span><span>) {
</span><span>
$this
</span>->setOption(<span>
$key
</span>, <span>
$value
</span><span>);
}
}
</span><span>
</span>
<span>
public
</span> <span>
function
</span> setOption(<span>
$key
</span>, <span>
$value
</span><span>)
{
</span><span>
$this
</span>->options[<span>
$key
</span>] = <span>
$value
</span><span>;
}
</span><span>
</span>
<span>
public
</span> <span>
function
</span> getJson(<span>
$url
</span>, <span>
array
</span> <span>
$data
</span> = <span>
array
</span>(), <span>
$type
</span> = self::<span>JSON_ARRAY)
{
</span><span>
$content
</span> = <span>
$this
</span>->get(<span>
$url
</span>, <span>
$data
</span><span>);
</span><span>
return
</span> json_decode(<span>
$content
</span>, <span>
$type
</span><span>);
}
</span><span>
</span>
<span>
public
</span> <span>
function
</span> get(<span>
$url
</span>, <span>
array
</span> <span>
$data
</span> = <span>
array
</span><span>())
{
</span><span>
if
</span> (!<span>
empty
</span>(<span>
$data
</span><span>)) {
</span><span>
if
</span> (<span>false</span> === <span>
strpos
</span>(<span>
$url
</span>,
'?'
<span>)) {
</span><span>
$url
</span> .=
'?'
<span>;
} </span><span>
else
</span><span> {
</span><span>
$url
</span> .=
'&'
<span>;
}
</span><span>
$url
</span> .= <span>http_build_query</span>(<span>
$data
</span><span>);
}
</span><span>
$options
</span> = <span>
array
</span><span>(
CURLOPT_URL </span>=> <span>
$url
</span>,<span>
);
</span><span>
return
</span> <span>
$this
</span>->request(<span>
$options
</span><span>);
}
</span><span>
</span>
<span>
private
</span> <span>
function
</span> request(<span>
array
</span> <span>
$options
</span> = <span>
array
</span><span>())
{
</span><span>
$this
</span>->setOptions(<span>
$options
</span><span>);
curl_setopt_array(</span><span>
$this
</span>->curl, <span>
$this
</span>-><span>options);
</span><span>
$result
</span> = curl_exec(<span>
$this
</span>-><span>curl);
</span><span>
$errorNo
</span> = curl_errno(<span>
$this
</span>-><span>curl);
</span><span>
$response
</span> = curl_getinfo( <span>
$this
</span>-><span>curl );
</span><span>
if
</span> (<span>
$errorNo
</span><span>) {
</span><span>
$this
</span>->error =
'['
. <span>
$errorNo
</span> .
'] '
. curl_error(<span>
$this
</span>-><span>curl);
} </span><span>
else
</span><span> {
</span><span>
$this
</span>->error = <span>null</span><span>;
}
</span><span>
if
</span>(<span>isset</span>(<span>
$response
</span>[
'http_code'
<span>])){
</span><span>
$this
</span>->httpCode = <span>
$response
</span>[
'http_code'
<span>];
}
</span><span>
return
</span> <span>
$result
</span><span>;
}
</span><span>
</span>
<span>
public
</span> <span>
function
</span> postJson(<span>
$url
</span>, <span>
array
</span> <span>
$data
</span> = <span>
array
</span>(), <span>
$return
</span> = self::<span>JSON_ARRAY)
{
</span><span>
$content
</span> = <span>
$this
</span>->post(<span>
$url
</span>, <span>
$data
</span><span>);
</span><span>
return
</span> json_decode(<span>
$content
</span>, <span>
$return
</span><span>);
}
</span><span>
</span>
<span>
public
</span> <span>
function
</span> post(<span>
$url
</span>, <span>
array
</span> <span>
$data
</span> = <span>
array
</span><span>())
{
</span><span>
$options
</span> = <span>
array
</span><span>(
CURLOPT_URL </span>=> <span>
$url
</span>,<span>
CURLOPT_POST </span>=> 1,<span>
);
</span><span>
if
</span> (!<span>
empty
</span>(<span>
$data
</span><span>)) {
</span><span>
if
</span> (<span>
$this
</span>->isMultiPart(<span>
$data
</span><span>)) {
</span><span>
$options
</span>[CURLOPT_POSTFIELDS] = <span>
$data
</span><span>;
} </span><span>
else
</span><span> {
</span><span>
$options
</span>[CURLOPT_POSTFIELDS] = <span>http_build_query</span>(<span>
$data
</span><span>);
}
}
</span><span>
return
</span> <span>
$this
</span>->request(<span>
$options
</span><span>);
}
</span><span>
private
</span> <span>
function
</span> isMultiPart(<span>
$data
</span><span>)
{
</span><span>
foreach
</span> (<span>
$data
</span> <span>
as
</span> <span>
$value
</span><span>) {
</span><span>
if
</span> (
'@'
== <span>
$value
</span>[0<span>])
</span><span>
return
</span> <span>true</span><span>;
}
</span><span>
return
</span> <span>false</span><span>;
}
</span><span>
</span>
<span>
public
</span> <span>
function
</span><span> hasError()
{
</span><span>
return
</span> <span>null</span> !== <span>
$this
</span>-><span>error;
}
</span><span>
</span>
<span>
public
</span> <span>
function
</span><span> getError()
{
</span><span>
return
</span> <span>
$this
</span>-><span>error;
}
</span><span>
public
</span> <span>
function
</span><span> getHttpCode()
{
</span><span>
return
</span> <span>
$this
</span>-><span>httpCode;
}
} </span>