54 lines
1.4 KiB
PHP
54 lines
1.4 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace PhpOffice\PhpSpreadsheet\Calculation;
|
||
|
|
||
|
use PhpOffice\PhpSpreadsheet\Settings;
|
||
|
use Psr\Http\Client\ClientExceptionInterface;
|
||
|
|
||
|
class Web
|
||
|
{
|
||
|
/**
|
||
|
* WEBSERVICE.
|
||
|
*
|
||
|
* Returns data from a web service on the Internet or Intranet.
|
||
|
*
|
||
|
* Excel Function:
|
||
|
* Webservice(url)
|
||
|
*
|
||
|
* @return string the output resulting from a call to the webservice
|
||
|
*/
|
||
|
public static function WEBSERVICE(string $url)
|
||
|
{
|
||
|
$url = trim($url);
|
||
|
if (strlen($url) > 2048) {
|
||
|
return Functions::VALUE(); // Invalid URL length
|
||
|
}
|
||
|
|
||
|
if (!preg_match('/^http[s]?:\/\//', $url)) {
|
||
|
return Functions::VALUE(); // Invalid protocol
|
||
|
}
|
||
|
|
||
|
// Get results from the the webservice
|
||
|
$client = Settings::getHttpClient();
|
||
|
$requestFactory = Settings::getRequestFactory();
|
||
|
$request = $requestFactory->createRequest('GET', $url);
|
||
|
|
||
|
try {
|
||
|
$response = $client->sendRequest($request);
|
||
|
} catch (ClientExceptionInterface $e) {
|
||
|
return Functions::VALUE(); // cURL error
|
||
|
}
|
||
|
|
||
|
if ($response->getStatusCode() != 200) {
|
||
|
return Functions::VALUE(); // cURL error
|
||
|
}
|
||
|
|
||
|
$output = $response->getBody()->getContents();
|
||
|
if (strlen($output) > 32767) {
|
||
|
return Functions::VALUE(); // Output not a string or too long
|
||
|
}
|
||
|
|
||
|
return $output;
|
||
|
}
|
||
|
}
|