mirror of
https://github.com/php-curl-class/php-curl-class.git
synced 2026-08-30 04:01:47 +00:00
Fix #441: Allow using string as well as array for query parameter argument
This commit is contained in:
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user