Merge pull request #442 from zachborboa/master

Allow using string as well as array for query parameter argument
This commit is contained in:
Zach Borboa
2017-04-26 23:55:57 -07:00
committed by GitHub
3 changed files with 72 additions and 7 deletions
+1 -1
View File
@@ -238,7 +238,7 @@ Curl::setPort($port)
Curl::setReferer($referer)
Curl::setReferrer($referrer)
Curl::setTimeout($seconds)
Curl::setUrl($url, $data = array())
Curl::setUrl($url, $mixed_data = '')
Curl::setUserAgent($user_agent)
Curl::setXmlDecoder($function)
Curl::success($callback)
+14 -6
View File
@@ -1114,12 +1114,12 @@ class Curl
*
* @access public
* @param $url
* @param $data
* @param $mixed_data
*/
public function setUrl($url, $data = array())
public function setUrl($url, $mixed_data = '')
{
$this->baseUrl = $url;
$this->url = $this->buildURL($url, $data);
$this->url = $this->buildURL($url, $mixed_data);
$this->setOpt(CURLOPT_URL, $this->url);
}
@@ -1259,13 +1259,21 @@ class Curl
*
* @access private
* @param $url
* @param $data
* @param $mixed_data
*
* @return string
*/
private function buildURL($url, $data = array())
private function buildURL($url, $mixed_data = '')
{
return $url . (empty($data) ? '' : '?' . http_build_query($data, '', '&'));
$query_string = '';
if (!empty($mixed_data)) {
if (is_string($mixed_data)) {
$query_string .= '?' . $mixed_data;
} elseif (is_array($mixed_data)) {
$query_string .= '?' . http_build_query($mixed_data, '', '&');
}
}
return $url . $query_string;
}
/**
+57
View File
@@ -3023,6 +3023,63 @@ class CurlTest extends \PHPUnit\Framework\TestCase
$this->assertTrue($curl->getOpt(CURLOPT_VERBOSE));
}
public function testBuildUrlArgs()
{
$tests = array(
array(
'args' => array(
'url' => 'https://www.example.com/',
'mixed_data' => null,
),
'expected' => 'https://www.example.com/',
),
array(
'args' => array(
'url' => 'https://www.example.com/',
'mixed_data' => '',
),
'expected' => 'https://www.example.com/',
),
array(
'args' => array(
'url' => 'https://www.example.com/',
'mixed_data' => array(),
),
'expected' => 'https://www.example.com/',
),
array(
'args' => array(
'url' => 'https://www.example.com/',
'mixed_data' => array(
'a' => '1',
'b' => '2',
'c' => '3',
),
),
'expected' => 'https://www.example.com/?a=1&b=2&c=3',
),
array(
'args' => array(
'url' => 'https://www.example.com/',
'mixed_data' => 'user_ids=user_1,user_2',
),
'expected' => 'https://www.example.com/?user_ids=user_1,user_2',
),
);
foreach ($tests as $test) {
$curl_1 = new Curl();
$reflector = new ReflectionObject($curl_1);
$method = $reflector->getMethod('buildURL');
$method->setAccessible(true);
$actual_url = $method->invoke($curl_1, $test['args']['url'], $test['args']['mixed_data']);
$this->assertEquals($test['expected'], $actual_url);
$curl_2 = new Curl();
$curl_2->setUrl($test['args']['url'], $test['args']['mixed_data']);
$this->assertEquals($test['expected'], $curl_2->url);
}
}
public function testBuildUrlArgSeparator()
{
$base_url = 'https://www.example.com/path';