38 function getURLContent($url, $postorget =
'GET', $param =
'', $followlocation = 1, $addheaders = array(), $allowedschemes = array(
'http',
'https'), $localurl = 0)
42 $USE_PROXY = empty($conf->global->MAIN_PROXY_USE) ? 0 : $conf->global->MAIN_PROXY_USE;
43 $PROXY_HOST = empty($conf->global->MAIN_PROXY_HOST) ? 0 : $conf->global->MAIN_PROXY_HOST;
44 $PROXY_PORT = empty($conf->global->MAIN_PROXY_PORT) ? 0 : $conf->global->MAIN_PROXY_PORT;
45 $PROXY_USER = empty($conf->global->MAIN_PROXY_USER) ? 0 : $conf->global->MAIN_PROXY_USER;
46 $PROXY_PASS = empty($conf->global->MAIN_PROXY_PASS) ? 0 : $conf->global->MAIN_PROXY_PASS;
48 dol_syslog(
"getURLContent postorget=".$postorget.
" URL=".$url.
" param=".$param);
57 curl_setopt($ch, CURLOPT_VERBOSE, 1);
58 curl_setopt($ch, CURLOPT_USERAGENT,
'Dolibarr geturl function');
62 @curl_setopt($ch, CURLOPT_FOLLOWLOCATION,
false);
64 if (is_array($addheaders) && count($addheaders)) curl_setopt($ch, CURLOPT_HTTPHEADER, $addheaders);
65 curl_setopt($ch, CURLINFO_HEADER_OUT,
true);
69 if (!empty($conf->global->MAIN_CURL_SSLVERSION)) curl_setopt($ch, CURLOPT_SSLVERSION, $conf->global->MAIN_CURL_SSLVERSION);
73 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,
false);
74 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,
false);
78 if (is_array($allowedschemes)) {
79 foreach ($allowedschemes as $allowedscheme) {
80 if ($allowedscheme ==
'http') $protocols |= CURLPROTO_HTTP;
81 if ($allowedscheme ==
'https') $protocols |= CURLPROTO_HTTPS;
83 curl_setopt($ch, CURLOPT_PROTOCOLS, $protocols);
84 curl_setopt($ch, CURLOPT_REDIR_PROTOCOLS, $protocols);
87 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, empty($conf->global->MAIN_USE_CONNECT_TIMEOUT) ? 5 : $conf->global->MAIN_USE_CONNECT_TIMEOUT);
88 curl_setopt($ch, CURLOPT_TIMEOUT, empty($conf->global->MAIN_USE_RESPONSE_TIMEOUT) ? 30 : $conf->global->MAIN_USE_RESPONSE_TIMEOUT);
91 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
92 if ($postorget ==
'POST') {
93 curl_setopt($ch, CURLOPT_POST, 1);
94 curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
95 } elseif ($postorget ==
'POSTALREADYFORMATED') {
96 curl_setopt($ch, CURLOPT_CUSTOMREQUEST,
'POST');
97 curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
98 } elseif ($postorget ==
'PUT') {
100 curl_setopt($ch, CURLOPT_CUSTOMREQUEST,
'PUT');
101 if (!is_array($param)) parse_str($param, $array_param);
103 dol_syslog(
"parameter param must be a string", LOG_WARNING);
104 $array_param = $param;
106 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($array_param));
107 } elseif ($postorget ==
'PUTALREADYFORMATED') {
108 curl_setopt($ch, CURLOPT_CUSTOMREQUEST,
'PUT');
109 curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
110 } elseif ($postorget ==
'HEAD') {
111 curl_setopt($ch, CURLOPT_CUSTOMREQUEST,
'HEAD');
112 curl_setopt($ch, CURLOPT_NOBODY,
true);
113 } elseif ($postorget ==
'DELETE') {
114 curl_setopt($ch, CURLOPT_CUSTOMREQUEST,
'DELETE');
116 curl_setopt($ch, CURLOPT_POST, 0);
121 dol_syslog(
"getURLContent set proxy to ".$PROXY_HOST.
":".$PROXY_PORT.
" - ".$PROXY_USER.
":".$PROXY_PASS);
123 curl_setopt($ch, CURLOPT_PROXY, $PROXY_HOST.
":".$PROXY_PORT);
124 if ($PROXY_USER) curl_setopt($ch, CURLOPT_PROXYUSERPWD, $PROXY_USER.
":".$PROXY_PASS);
133 if ($maxRedirection < 1)
break;
135 curl_setopt($ch, CURLOPT_URL, $newUrl);
138 $newUrlArray = parse_url($newUrl);
139 $hosttocheck = $newUrlArray[
'host'];
140 $hosttocheck = str_replace(array(
'[',
']'),
'', $hosttocheck);
142 if (in_array($hosttocheck, array(
'localhost',
'localhost.domain'))) {
143 $iptocheck =
'127.0.0.1';
146 $iptocheck = $hosttocheck;
149 if (!filter_var($iptocheck, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6)) {
154 if ($localurl == 0) {
155 if (!filter_var($iptocheck, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
156 $info[
'http_code'] = 400;
157 $info[
'content'] =
'Error bad hostname IP (private or reserved range). Must be an external URL.';
160 if (in_array($iptocheck, array(
'100.100.100.200'))) {
161 $info[
'http_code'] = 400;
162 $info[
'content'] =
'Error bad hostname IP (Used by Alibaba metadata). Must be an external URL.';
166 if ($localurl == 1) {
167 if (filter_var($iptocheck, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
168 $info[
'http_code'] = 400;
169 $info[
'content'] =
'Error bad hostname. Must be a local URL.';
176 $response = curl_exec($ch);
178 $info = curl_getinfo($ch);
179 $http_code = $info[
'http_code'];
180 if ($followlocation && ($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307)) {
181 $newUrl = $info[
'redirect_url'];
191 $request = curl_getinfo($ch, CURLINFO_HEADER_OUT);
193 dol_syslog(
"getURLContent request=".$request);
195 dol_syslog(
"getURLContent response size=".strlen($response));
198 if (curl_errno($ch)) {
200 $rep[
'content'] = $response;
203 $rep[
'curl_error_no'] = curl_errno($ch);
204 $rep[
'curl_error_msg'] = curl_error($ch);
206 dol_syslog(
"getURLContent response array is ".join(
',', $rep));
214 dol_syslog(
"getURLContent http_code=".$rep[
'http_code']);
217 $rep[
'content'] = $response;
218 $rep[
'curl_error_no'] =
'';
219 $rep[
'curl_error_msg'] =
'';
239 $tmpdomain = preg_replace(
'/^https?:\/\//i',
'', $url);
240 $tmpdomain = preg_replace(
'/\/.*$/i',
'', $tmpdomain);
242 $tmpdomain = preg_replace(
'/^.*\.([^\.]+)\.([^\.]+)\.([^\.]+)$/',
'\1.\2.\3', $tmpdomain);
244 $tmpdomain = preg_replace(
'/^.*\.([^\.]+)\.([^\.]+)$/',
'\1.\2', $tmpdomain);
247 $tmpdomain = preg_replace(
'/\.[^\.]+$/',
'', $tmpdomain);
266 if (preg_match(
'/^(https?:\/\/)/i', $tmpurl, $reg)) $prefix = $reg[1];
267 $tmpurl = preg_replace(
'/^https?:\/\//i',
'', $tmpurl);
268 $tmpurl = preg_replace(
'/\/.*$/i',
'', $tmpurl);
270 return $prefix.$tmpurl;
281 $content = preg_replace(
'/<!--[^\-]+-->/',
'', $content);
removeHtmlComment($content)
Function to remove comments into HTML content.
getRootURLFromURL($url)
Function root url from a long url For example: https://www.abc.mydomain.com/dir/page.html return 'https://www.abc.mydomain.com' For example: http://www.abc.mydomain.com/ return 'https://www.abc.mydomain.com'.
getURLContent($url, $postorget= 'GET', $param= '', $followlocation=1, $addheaders=array(), $allowedschemes=array('http', 'https'), $localurl=0)
Function to get a content from an URL (use proxy if proxy defined).
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename= '', $restricttologhandler= '', $logcontext=null)
Write log message into outputs.
getDomainFromURL($url, $mode=0)
Function get second level domain name.