Refactored library. Added new validation and excpetions. Added JSON input support

This commit is contained in:
Evan Seguin
2012-08-31 16:36:51 -07:00
parent b6939ad164
commit 318a954400
5 changed files with 173 additions and 127 deletions

View File

@@ -24,82 +24,14 @@
*
*/
define("PLACEHOLDER_REGEX", "/\{([\w\.]+)\}/");
class UrlUtils {
public static function prepareRequest(&$url, &$parameters, $addRegularQueryStringParameters = false) {
if ($parameters == null) {
$parameters = array();
public static function buildUrlWithQueryString($url, $parameters) {
foreach ($parameters as $paramKey => $paramValue) {
$delimiter = (strpos($url, "?") === false) ? "?" : "&";
$url .= $delimiter . $paramKey . "=" . urlencode($paramValue);
}
// Remove null parameters
$keys = array_keys($parameters);
for ($i = 0;$i<count($keys);$i++) {
$key = $keys[$i];
if ($parameters[$key] === null) {
unset($parameters[$key]);
} else {
$parameters[$key] = (string)$parameters[$key];
}
}
$finalUrl = $url;
$matches = null;
$match = preg_match_all(PLACEHOLDER_REGEX, $url, $matches);
if (!empty($matches) && count($matches) > 1) {
$bracketedMatches = $matches[0];
$plainMatches = $matches[1];
foreach ($plainMatches as $index => $key) {
if (array_key_exists($key, $parameters)) {
$finalUrl = str_replace($bracketedMatches[$index], rawurlencode($parameters[$key]), $finalUrl);
unset($parameters[$key]);
} else {
$finalUrl = preg_replace("/&?[\w]*=?\{" . $key . "\}/", "", $finalUrl);
}
}
}
$finalUrl = str_replace("?&", "?", $finalUrl);
$finalUrl = preg_replace("/\?$/", "", $finalUrl);
if ($addRegularQueryStringParameters) {
// Get regular query string parameters
self::addRegularQueryStringParameters($finalUrl, $parameters);
} else {
foreach ($parameters as $paramKey => $paramValue) {
$delimiter = (strpos($finalUrl, "?") === false) ? "?" : "&";
$finalUrl .= $delimiter . $paramKey . "=" . urlencode($paramValue);
}
}
$url = $finalUrl;
}
private static function addRegularQueryStringParameters($url, &$parameters) {
$urlParts = explode("?", $url);
if (count($urlParts) > 1) {
$queryString = $urlParts[1];
$queryStringParameters = explode("&", $queryString);
foreach ($queryStringParameters as $queryStringParameter) {
$queryStringParameterParts = explode("=", $queryStringParameter);
if (count($queryStringParameterParts) > 1) {
list($paramKey, $paramValue) = $queryStringParameterParts;
if (!self::isPlaceHolder($paramValue)) {
$parameters[$paramKey] = $paramValue;
}
}
}
}
}
private static function isPlaceHolder($value) {
return preg_match(PLACEHOLDER_REGEX, $value);
}
public static function generateClientHeaders() {
$headers = "User-Agent: mashape-php/1.0: ";
return $headers;
return $url;
}
}