Innanzitutto è d'obbligo fare una premessa dicendo che l'interfaccia services.cgi è a tutti gli effetti un web service. Come tutti i web service sfrutta il protocollo http per il trasporto e un protocollo proprietario per lo strato di servizio (non sono supportati protocolli standard come SOAP, RPC, etc.). Inoltre, in quanto web service, si presuppone che tale interfaccia venga utilizzata da applicazioni di terze parti e non direttamente da browser.
Infatti un malinteso comune è quello di pensare che un link che lancia un particolare comando all'interfaccia services.cgi possa essere inserito in una pagina web e cliccato da un utente. Una cosa del genere non potrà andare mai a buon fine in maniera trasparente per l'utente, poichè il browser richiederà esplicitamente l'autenticazione e l'utente riceverà l'output "grezzo" del comando. Quindi un tale approccio è una forzatura e si potrebbe pensare di utilizzarlo solamente per simulazioni o test.
Ciò detto, la questione dell'autenticazione può essere affrontata in un unico modo, e cioè rifacendosi allo standard http, il quale (come riportato da RFC) impone di specificare le credenziali nell'header della richiesta. Questo significa che chi sviluppa l'applicazione di terze parti, prima di effettuare la GET http, nel codice sorgente deve in qualche modo costruire l'header http con le credenziali di amministratore del server voispeed. Chiaramente, come farlo dipende dal particolare linguaggio / oggetto / libreria utilizzato dallo sviluppatore dell'applicazione.
Riportiamo di seguito un esempio base di come effettuare l'autenticazione in PHP:
<?php
function connectToURL($addr, $port, $path, $user="", $pass="", $timeout="30")
{
$urlHandle = fsockopen($addr, $port, $errno, $errstr, $timeout);
if ($urlHandle)
{
socket_set_timeout($urlHandle, $timeout);
if ($path)
{
$urlString = "GET $path HTTP/1.0\r\nHost: $addr\r\nConnection: Keep-Alive\r\nUser-Agent: MyURLGrabber\r\n";
if ($user)
$urlString .= "Authorization: Basic ".base64_encode("$user:$pass")."\r\n";
$urlString .= "\r\n";
fputs($urlHandle, $urlString);
$response = fgets($urlHandle);
if (substr_count($response, "200 OK") > 0) {
$endHeader = false; while ( !$endHeader)
{
if (fgets($urlHandle) == "\r\n")
$endHeader = true;
}
return $urlHandle; }
else if (strlen($response) < 15) {
fclose($urlHandle);
return -1;
}
else {
fclose($urlHandle);
return substr($response,9,3);
}
}
return $urlHandle;
}
else
{
return 0;
}
}
}
?>