Merge pull request #150 from zachborboa/master

Allow setting the base url for MultiCurl requests
This commit is contained in:
Zach Borboa
2015-03-04 01:40:53 +07:00
3 changed files with 167 additions and 2 deletions
+3 -1
View File
@@ -164,6 +164,7 @@ Curl::headerCallback($ch, $header)
Curl::options($url, $data = array())
Curl::patch($url, $data = array())
Curl::post($url, $data = array())
Curl::progress($callback)
Curl::put($url, $data = array())
Curl::setBasicAuthentication($username, $password = '')
Curl::setCookie($key, $value)
@@ -191,7 +192,7 @@ Curl::is_array_multidim($array)
### Experimental Methods
```php
MultiCurl::__construct()
MultiCurl::__construct($base_url = null)
MultiCurl::__destruct()
MultiCurl::addDelete($url, $data = array())
MultiCurl::addDownload($url, $mixed_filename)
@@ -216,6 +217,7 @@ MultiCurl::setOpt($option, $value)
MultiCurl::setReferer($referer)
MultiCurl::setReferrer($referrer)
MultiCurl::setTimeout($seconds)
MultiCurl::setURL($url)
MultiCurl::setUserAgent($user_agent)
MultiCurl::start()
MultiCurl::success($callback)
+37 -1
View File
@@ -4,6 +4,7 @@ namespace Curl;
class MultiCurl
{
public $base_url = null;
public $multi_curl;
public $curls = array();
private $curl_fhs = array();
@@ -19,14 +20,19 @@ class MultiCurl
private $json_decoder = null;
public function __construct()
public function __construct($base_url = null)
{
$this->multi_curl = curl_multi_init();
$this->headers = new CaseInsensitiveArray();
$this->setURL($base_url);
}
public function addDelete($url, $data = array())
{
if (is_array($url)) {
$data = $url;
$url = $this->base_url;
}
$curl = new Curl();
$curl->setURL($url, $data);
$curl->unsetHeader('Content-Length');
@@ -60,6 +66,10 @@ class MultiCurl
public function addGet($url, $data = array())
{
if (is_array($url)) {
$data = $url;
$url = $this->base_url;
}
$curl = new Curl();
$curl->setURL($url, $data);
$curl->setOpt(CURLOPT_CUSTOMREQUEST, 'GET');
@@ -70,6 +80,10 @@ class MultiCurl
public function addHead($url, $data = array())
{
if (is_array($url)) {
$data = $url;
$url = $this->base_url;
}
$curl = new Curl();
$curl->setURL($url, $data);
$curl->setOpt(CURLOPT_CUSTOMREQUEST, 'HEAD');
@@ -80,6 +94,10 @@ class MultiCurl
public function addOptions($url, $data = array())
{
if (is_array($url)) {
$data = $url;
$url = $this->base_url;
}
$curl = new Curl();
$curl->setURL($url, $data);
$curl->unsetHeader('Content-Length');
@@ -90,6 +108,10 @@ class MultiCurl
public function addPatch($url, $data = array())
{
if (is_array($url)) {
$data = $url;
$url = $this->base_url;
}
$curl = new Curl();
$curl->setURL($url);
$curl->unsetHeader('Content-Length');
@@ -101,6 +123,11 @@ class MultiCurl
public function addPost($url, $data = array())
{
if (is_array($url)) {
$data = $url;
$url = $this->base_url;
}
$curl = new Curl();
if (is_array($data) && empty($data)) {
@@ -117,6 +144,10 @@ class MultiCurl
public function addPut($url, $data = array())
{
if (is_array($url)) {
$data = $url;
$url = $this->base_url;
}
$curl = new Curl();
$curl->setURL($url);
$curl->setOpt(CURLOPT_CUSTOMREQUEST, 'PUT');
@@ -210,6 +241,11 @@ class MultiCurl
$this->setOpt(CURLOPT_TIMEOUT, $seconds);
}
public function setURL($url)
{
$this->base_url = $url;
}
public function setUserAgent($user_agent)
{
$this->setOpt(CURLOPT_USERAGENT, $user_agent);
@@ -1726,4 +1726,131 @@ class MultiCurlTest extends PHPUnit_Framework_TestCase
$this->assertTrue($download_before_send_called);
$this->assertFalse($download_callback_called);
}
public function testSetUrlInConstructor()
{
$data = array('key' => 'value');
$multi_curl = new MultiCurl(Test::TEST_URL);
$multi_curl->setHeader('X-DEBUG-TEST', 'get');
$multi_curl->addDelete($data)->complete(function($instance) {
PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url);
PHPUnit_Framework_Assert::assertEquals('key=value', $instance->response);
});
$multi_curl->start();
$multi_curl = new MultiCurl(Test::TEST_URL);
$multi_curl->setHeader('X-DEBUG-TEST', 'get');
$multi_curl->addGet($data)->complete(function($instance) {
PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url);
PHPUnit_Framework_Assert::assertEquals('key=value', $instance->response);
});
$multi_curl->start();
$multi_curl = new MultiCurl(Test::TEST_URL);
$multi_curl->setHeader('X-DEBUG-TEST', 'get');
$multi_curl->addHead($data)->complete(function($instance) {
PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url);
PHPUnit_Framework_Assert::assertEquals(
'HEAD /?key=value HTTP/1.1', $instance->request_headers['Request-Line']);
});
$multi_curl->start();
$multi_curl = new MultiCurl(Test::TEST_URL);
$multi_curl->setHeader('X-DEBUG-TEST', 'get');
$multi_curl->addOptions($data)->complete(function($instance) {
PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url);
PHPUnit_Framework_Assert::assertEquals('key=value', $instance->response);
});
$multi_curl->start();
$multi_curl = new MultiCurl(Test::TEST_URL);
$multi_curl->setHeader('X-DEBUG-TEST', 'request_method');
$multi_curl->addPatch($data)->complete(function($instance) {
PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url);
PHPUnit_Framework_Assert::assertEquals('PATCH', $instance->response);
});
$multi_curl->start();
$multi_curl = new MultiCurl(Test::TEST_URL);
$multi_curl->setHeader('X-DEBUG-TEST', 'post');
$multi_curl->addPost($data)->complete(function($instance) {
PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url);
PHPUnit_Framework_Assert::assertEquals('key=value', $instance->response);
});
$multi_curl->start();
$multi_curl = new MultiCurl(Test::TEST_URL);
$multi_curl->setHeader('X-DEBUG-TEST', 'put');
$multi_curl->addPut($data)->complete(function($instance) {
PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url);
PHPUnit_Framework_Assert::assertEquals('key=value', $instance->response);
});
$multi_curl->start();
}
public function testSetUrl()
{
$data = array('key' => 'value');
$multi_curl = new MultiCurl();
$multi_curl->setHeader('X-DEBUG-TEST', 'get');
$multi_curl->setUrl(Test::TEST_URL);
$multi_curl->addDelete($data)->complete(function($instance) {
PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url);
PHPUnit_Framework_Assert::assertEquals('key=value', $instance->response);
});
$multi_curl->start();
$multi_curl = new MultiCurl();
$multi_curl->setHeader('X-DEBUG-TEST', 'get');
$multi_curl->setUrl(Test::TEST_URL);
$multi_curl->addGet($data)->complete(function($instance) {
PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url);
PHPUnit_Framework_Assert::assertEquals('key=value', $instance->response);
});
$multi_curl->start();
$multi_curl = new MultiCurl();
$multi_curl->setHeader('X-DEBUG-TEST', 'get');
$multi_curl->setUrl(Test::TEST_URL);
$multi_curl->addHead($data)->complete(function($instance) {
PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url);
PHPUnit_Framework_Assert::assertEquals(
'HEAD /?key=value HTTP/1.1', $instance->request_headers['Request-Line']);
});
$multi_curl->start();
$multi_curl = new MultiCurl();
$multi_curl->setHeader('X-DEBUG-TEST', 'get');
$multi_curl->setUrl(Test::TEST_URL);
$multi_curl->addOptions($data)->complete(function($instance) {
PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url);
PHPUnit_Framework_Assert::assertEquals('key=value', $instance->response);
});
$multi_curl = new MultiCurl();
$multi_curl->setHeader('X-DEBUG-TEST', 'request_method');
$multi_curl->setUrl(Test::TEST_URL);
$multi_curl->addPatch($data)->complete(function($instance) {
PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url);
PHPUnit_Framework_Assert::assertEquals('PATCH', $instance->response);
});
$multi_curl = new MultiCurl();
$multi_curl->setHeader('X-DEBUG-TEST', 'post');
$multi_curl->setUrl(Test::TEST_URL);
$multi_curl->addPost($data)->complete(function($instance) {
PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url);
PHPUnit_Framework_Assert::assertEquals('key=value', $instance->response);
});
$multi_curl = new MultiCurl();
$multi_curl->setHeader('X-DEBUG-TEST', 'put');
$multi_curl->setUrl(Test::TEST_URL);
$multi_curl->addPut($data)->complete(function($instance) {
PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url);
PHPUnit_Framework_Assert::assertEquals('key=value', $instance->response);
});
}
}