Skip to content

Commit 600877f

Browse files
committed
✨ HTTPClientTrait: +checkParams(), rawurlencode(), buildHttpQuery()
1 parent 85f459c commit 600877f

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

src/HTTPClientTrait.php

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,102 @@ protected function httpPUT(string $url, array $params = null, $body = null, arra
101101
return $this->http->request($url, $params, 'PUT', $body, $headers);
102102
}
103103

104+
/**
105+
* @param $params
106+
*
107+
* @return array
108+
*/
109+
protected function checkParams($params){
110+
111+
if(is_array($params)){
112+
113+
foreach($params as $key => $value){
114+
115+
if(is_bool($value)){
116+
$params[$key] = (string)(int)$value;
117+
}
118+
elseif(is_null($value) || empty($value)){
119+
unset($params[$key]);
120+
}
121+
122+
}
123+
124+
}
125+
126+
return $params;
127+
}
128+
129+
/**
130+
* @param $data
131+
*
132+
* @return array|string
133+
*/
134+
protected function rawurlencode($data){
135+
136+
if(is_array($data)){
137+
return array_map([$this, 'rawurlencode'], $data);
138+
}
139+
elseif(is_scalar($data)){
140+
return rawurlencode($data);
141+
}
142+
143+
return $data;
144+
}
145+
146+
/**
147+
* from https://github.com/abraham/twitteroauth/blob/master/src/Util.php
148+
*
149+
* @param array $params
150+
* @param bool $urlencode
151+
* @param string $delimiter
152+
* @param string $enclosure
153+
*
154+
* @return string
155+
*/
156+
public function buildHttpQuery(array $params, bool $urlencode = null, string $delimiter = null, string $enclosure = null):string {
157+
158+
if(empty($params)) {
159+
return '';
160+
}
161+
162+
// urlencode both keys and values
163+
if($urlencode ?? true){
164+
$params = array_combine(
165+
$this->rawurlencode(array_keys($params)),
166+
$this->rawurlencode(array_values($params))
167+
);
168+
}
169+
170+
// Parameters are sorted by name, using lexicographical byte value ordering.
171+
// Ref: Spec: 9.1.1 (1)
172+
uksort($params, 'strcmp');
173+
174+
$pairs = [];
175+
$enclosure = $enclosure ?? '';
176+
177+
foreach($params as $parameter => $value){
178+
179+
if(is_array($value)) {
180+
// If two or more parameters share the same name, they are sorted by their value
181+
// Ref: Spec: 9.1.1 (1)
182+
// June 12th, 2010 - changed to sort because of issue 164 by hidetaka
183+
sort($value, SORT_STRING);
184+
185+
foreach ($value as $duplicateValue) {
186+
$pairs[] = $parameter.'='.$enclosure.$duplicateValue.$enclosure;
187+
}
188+
189+
}
190+
else{
191+
$pairs[] = $parameter.'='.$enclosure.$value.$enclosure;
192+
}
193+
194+
}
195+
196+
// For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
197+
// Each name-value pair is separated by an '&' character (ASCII code 38)
198+
return implode($delimiter ?? '&', $pairs);
199+
}
200+
201+
104202
}

0 commit comments

Comments
 (0)