class Network
{
/**
- * @brief Curl wrapper
+ * Curl wrapper
*
* If binary flag is true, return binary results.
* Set the cookiejar argument to a string (e.g. "/tmp/friendica-cookies.txt")
* to preserve cookies from one request to the next.
*
+ * @brief Curl wrapper
* @param string $url URL to fetch
* @param boolean $binary default false
* TRUE if asked to return binary results (file download)
*/
public static function fetchUrl($url, $binary = false, &$redirects = 0, $timeout = 0, $accept_content = null, $cookiejar = 0)
{
- $ret = self::curl(
+ $ret = self::fetchUrlFull($url, $binary, $redirects, $timeout, $accept_content, $cookiejar);
+
+ return $ret['body'];
+ }
+
+ /**
+ * Curl wrapper with array of return values.
+ *
+ * Inner workings and parameters are the same as @ref fetchUrl but returns an array with
+ * all the information collected during the fetch.
+ *
+ * @brief Curl wrapper with array of return values.
+ * @param string $url URL to fetch
+ * @param boolean $binary default false
+ * TRUE if asked to return binary results (file download)
+ * @param integer $redirects The recursion counter for internal use - default 0
+ * @param integer $timeout Timeout in seconds, default system config value or 60 seconds
+ * @param string $accept_content supply Accept: header with 'accept_content' as the value
+ * @param string $cookiejar Path to cookie jar file
+ *
+ * @return array With all relevant information, 'body' contains the actual fetched content.
+ */
+ public static function fetchUrlFull($url, $binary = false, &$redirects = 0, $timeout = 0, $accept_content = null, $cookiejar = 0)
+ {
+ return self::curl(
$url,
$binary,
$redirects,
'cookiejar'=>$cookiejar
]
);
-
- return($ret['body']);
}
/**
$a = get_app();
$parts = parse_url($url);
- $path_parts = explode('/', $parts['path']);
+ $path_parts = explode('/', defaults($parts, 'path', ''));
foreach ($path_parts as $part) {
if (strlen($part) <> mb_strlen($part)) {
$parts2[] = rawurlencode($part);
$newurl = $curl_info['redirect_url'];
- if (($new_location_info['path'] == '') && ($new_location_info['host'] != '')) {
+ if (empty($new_location_info['path']) && !empty($new_location_info['host'])) {
$newurl = $new_location_info['scheme'] . '://' . $new_location_info['host'] . $old_location_info['path'];
}
$matches = [];
$new_location_info = @parse_url($curl_info['redirect_url']);
$old_location_info = @parse_url($curl_info['url']);
-
+
preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
$newurl = trim(array_pop($matches));
/// @TODO Really suppress function outcomes? Why not find them + debug them?
$h = @parse_url($url);
- if ((is_array($h)) && (@dns_get_record($h['host'], DNS_A + DNS_CNAME + DNS_PTR) || filter_var($h['host'], FILTER_VALIDATE_IP) )) {
+ if ((is_array($h)) && (@dns_get_record($h['host'], DNS_A + DNS_CNAME) || filter_var($h['host'], FILTER_VALIDATE_IP) )) {
return $url;
}
$h = substr($addr, strpos($addr, '@') + 1);
- if (($h) && (dns_get_record($h, DNS_A + DNS_CNAME + DNS_PTR + DNS_MX) || filter_var($h, FILTER_VALIDATE_IP) )) {
+ if (($h) && (dns_get_record($h, DNS_A + DNS_MX) || filter_var($h, FILTER_VALIDATE_IP) )) {
+ return true;
+ }
+ if (($h) && dns_get_record($h, DNS_CNAME + DNS_MX)) {
return true;
}
return false;
public static function stripTrackingQueryParams($url)
{
$urldata = parse_url($url);
- if (is_string($urldata["query"])) {
+ if (!empty($urldata["query"])) {
$query = $urldata["query"];
parse_str($query, $querydata);
return "";
}
+ if (empty($parts1["scheme"])) {
+ $parts1["scheme"] = '';
+ }
+ if (empty($parts2["scheme"])) {
+ $parts2["scheme"] = '';
+ }
+
if ($parts1["scheme"] != $parts2["scheme"]) {
return "";
}
+ if (empty($parts1["host"])) {
+ $parts1["host"] = '';
+ }
+ if (empty($parts2["host"])) {
+ $parts2["host"] = '';
+ }
+
if ($parts1["host"] != $parts2["host"]) {
return "";
}
+ if (empty($parts1["port"])) {
+ $parts1["port"] = '';
+ }
+ if (empty($parts2["port"])) {
+ $parts2["port"] = '';
+ }
+
if ($parts1["port"] != $parts2["port"]) {
return "";
}
$match .= ":".$parts1["port"];
}
+ if (empty($parts1["path"])) {
+ $parts1["path"] = '';
+ }
+ if (empty($parts2["path"])) {
+ $parts2["path"] = '';
+ }
+
$pathparts1 = explode("/", $parts1["path"]);
$pathparts2 = explode("/", $parts2["path"]);
$i = 0;
$path = "";
do {
- $path1 = $pathparts1[$i];
- $path2 = $pathparts2[$i];
+ $path1 = defaults($pathparts1, $i, '');
+ $path2 = defaults($pathparts2, $i, '');
if ($path1 == $path2) {
$path .= $path1."/";