: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
public static function getFormattedHeaders($headers)
$formattedHeaders = array();
$combinedHeaders = array_change_key_case(array_merge(self::$defaultHeaders, (array) $headers));
foreach ($combinedHeaders as $key => $val) {
$formattedHeaders[] = self::getHeaderString($key, $val);
if (!array_key_exists('user-agent', $combinedHeaders)) {
$formattedHeaders[] = 'user-agent: unirest-php/2.0';
if (!array_key_exists('expect', $combinedHeaders)) {
$formattedHeaders[] = 'expect:';
return $formattedHeaders;
private static function getArrayFromQuerystring($query)
$query = preg_replace_callback('/(?:^|(?<=&))[^=[]+/', function ($match) {
return bin2hex(urldecode($match[0]));
parse_str($query, $values);
return array_combine(array_map('hex2bin', array_keys($values)), $values);
* Ensure that a URL is encoded and safe to use with cURL
* @param string $url URL to encode
private static function encodeUrl($url)
$url_parsed = parse_url($url);
$scheme = $url_parsed['scheme'] . '://';
$host = $url_parsed['host'];
$port = (isset($url_parsed['port']) ? $url_parsed['port'] : null);
$path = (isset($url_parsed['path']) ? $url_parsed['path'] : null);
$query = (isset($url_parsed['query']) ? $url_parsed['query'] : null);
$query = '?' . http_build_query(self::getArrayFromQuerystring($query));
if ($port && $port[0] !== ':') {
$result = $scheme . $host . $port . $path . $query;
private static function getHeaderString($key, $val)
$key = trim(strtolower($key));
return $key . ': ' . $val;
* @param array $existing_options
* @param array $new_options
private static function mergeCurlOptions(&$existing_options, $new_options)
$existing_options = $new_options + $existing_options;
return $existing_options;