Come utilizzare l’API winadmin.it con client PHP

In questa guida, esamineremo i diversi client PHP che puoi utilizzare per connetterti all’API winadmin.it.

In particolare, tratteremo l’utilizzo dell’API winadmin.it con la funzione file_get_contents, Guzzle, HTTPful e il client HTTPS di Symfony.

Che cos’è l’API winadmin.it?

winadmin.it fornisce una serie di strumenti gratuiti che puoi utilizzare per monitorare le prestazioni del tuo sito web. Questi strumenti includono un analizzatore di collegamenti interrotti, il tempo di caricamento e un controllo DNS. È possibile accedere a questi strumenti online tramite l’interfaccia Web o l’API.

L’API è basata su HTTP ed è accessibile da qualsiasi linguaggio di programmazione con una libreria client HTTP. L’API ha un generoso livello gratuito che puoi iniziare a utilizzare senza dover fornire informazioni di pagamento.

Cosa costruiremo

Scriveremo uno script, eseguibile da riga di comando, che calcolerà il tempo necessario per caricare il sito web di Google e stamparlo sul terminale. Implementeremo questo semplice programma utilizzando diversi client HTTP PHP per dimostrare che aspetto ha l’utilizzo dell’API.

In particolare, utilizzeremo le funzioni integrate – file_get_contents() e php_curl, e l’estensione Guzzle PHP. Per quanto semplici possano apparire questi esempi, dimostrano i concetti fondamentali dell’utilizzo dell’API winadmin.it.

Prerequisiti

Per seguire, dovrai conoscere PHP in anticipo e averlo installato sul tuo computer. Inoltre, avrai bisogno di Composer per gestire le estensioni.

Infine, avrai anche bisogno di un editor di testo in cui scrivere il codice. Nel mio caso, utilizzerò Visual Studio Code, un popolare editor di testo open source di Microsoft. Puoi scaricarlo dal sito Web di Visual Studio Code.

Panoramica dell’API winadmin.it

L’API winadmin.it ha endpoint diversi a seconda di cosa vuoi fare. L’elenco completo degli endpoint e la relativa documentazione è disponibile nella pagina della documentazione.

Creazione di un account winadmin.it

Per iniziare a utilizzare l’API, dovrai creare un account andando alla pagina di destinazione dell’API e facendo clic sul pulsante di registrazione. Al termine della registrazione, verrai indirizzato alla dashboard, dove vedrai la tua chiave API. La dashboard dovrebbe essere come l’immagine qui sotto. Ho oscurato la mia chiave API per motivi di sicurezza.

In ogni richiesta API che fai, dovrai fornire questa chiave come intestazione della richiesta. A breve, vedrai come questo può essere fatto.

Con un account winadmin.it creato e PHP installato, possiamo iniziare a creare il progetto.

Creazione della cartella del progetto

Innanzitutto, crea una cartella in cui memorizzeremo i file di progetto. Successivamente, crea i seguenti file

  • .env
  • con_ricciolo.php
  • con_file_get_contents.php
  • con_guzzle.php

Dopo, esegui il comando seguente per installare l’estensione vlucas/phpdotenv e guzzlehttp/guzzle

composer require vlucas/phpdotenv guzzlehttp/guzzle

A questo punto, la cartella del tuo progetto dovrebbe apparire così:

Ora apri il file .env e aggiungi la seguente riga di codice, sostituendo con la tua chiave API effettiva dalla dashboard di winadmin.it:

API_KEY=<your-api-key>

Utilizzo di file_get_contents()

Il primo metodo che potremmo usare per fare richieste HTTP è chiamare la funzione file_get_contents() che è incorporata in PHP. La firma della funzione della funzione file_get_contents() è la seguente:

file_get_contents(path, include_path, context)

Sebbene il metodo venga spesso utilizzato per leggere il contenuto di un file nell’archiviazione locale, è possibile utilizzarlo per leggere una risorsa Web, ad esempio i dati restituiti da un endpoint API.

Ora per iniziare, apri with_file_get_contents.php e aggiungi il codice PHP standard.

<?php
   // all the code to be inserted here
?>

Successivamente, possiamo iniziare con il caricamento delle estensioni. Aggiungi la seguente riga di codice al tuo file

require_once('vendor/autoload.php');

Successivamente, possiamo caricare le nostre variabili ambientali, che includono la chiave API

$dotenv = DotenvDotenv::createImmutable(__DIR__);
$dotenv->load();

Quindi, possiamo definire il carico utile. Questi saranno i dati che invieremo come parte del corpo della richiesta

$payload = json_encode([
    "url" => "https://www.google.com", 
    "proxyCountry" => "us",
    "followRedirect" => true
]);

Abbiamo creato una variabile di payload e l’abbiamo assegnata a una stringa JSON che contiene l’URL, proxyCountry e followRedirect come proprietà.

La proprietà url specifica la pagina web di cui vogliamo controllare il tempo di caricamento.

Il proxyCountry è la posizione del server che vogliamo utilizzare per effettuare la richiesta. In questo caso, utilizziamo il server USA, ma puoi scegliere tra India, Cina, Regno Unito e Francia. Puoi leggere la documentazione per maggiori dettagli.

Quindi followRedirect specifica se il server proxy deve seguire eventuali reindirizzamenti e misurare il tempo di risposta della risposta finale o del primo reindirizzamento.

Successivamente, possiamo creare opzioni che configureranno la nostra richiesta aggiungendo questo codice:

$options = [
    "http" => [
        "method" => "POST",
        "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']),
        "content" => $payload
    ] 
];

In questo modo, abbiamo creato un oggetto options che specifica che il nostro metodo HTTP è POST e abbiamo un’intestazione che specifica due proprietà, il tipo di contenuto come JSON e la x-api-key come chiave API che hai specificato nel .env ed è stato caricato come variabile ambientale.

Successivamente, possiamo effettuare la richiesta creando uno stream in cui verranno scritte le nostre opzioni:

$context = stream_context_create($options);

Successivamente, chiamiamo il metodo file_get_contents() per effettuare la richiesta e memorizzare la risposta come variabile.

$response = file_get_contents("https://api.winadmin.it.com/loadtime", false, $context);

Abbiamo inoltrato la richiesta a https://api.winadmin.it.com/loadtime. Il falso dice a PHP di non usare il percorso. E passiamo il contesto che abbiamo creato al metodo.

Per visualizzare la risposta, utilizzeremo l’output come segue.

echo "Loadtime: " . json_decode($response)->data->total . "n";

Alla fine di questo, il tuo file dovrebbe assomigliare a questo:

<?php
    require_once('vendor/autoload.php');

    $dotenv = DotenvDotenv::createImmutable(__DIR__);
    $dotenv->load();

    $payload = json_encode([
        "url" => "https://www.google.com", 
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $options = [
        "http" => [
            "method" => "POST",
            "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']),
            "content" => $payload
        ] 
    ];

    $context = stream_context_create($options);

    $response = file_get_contents("https://api.winadmin.it.com/loadtime", false, $context);

    echo "Loadtime: " . json_decode($response)->data->total . "n";
?>

Quando esegui il file usando il seguente comando:

php with_file_get_contents.php

Otterrai il seguente output

Loadtime: 81

Usando cURL

cURL è un’utilità della riga di comando utilizzata per effettuare richieste URL lato client. In PHP, può essere utilizzato utilizzando l’utilità php-curl. Per iniziare a usarlo, apri il file with_curl.php e scrivi il PHP standard

<?php
    // all new code will be written here
?>

Quindi importiamo le estensioni e carichiamo la variabile ambientale API_KEY definita nel file .env

require_once('vendor/autoload.php');

$dotenv = DotenvDotenv::createImmutable(__DIR__);
$dotenv->load();

Successivamente, creeremo una variabile per memorizzare le intestazioni del nostro oggetto come un array in cui ogni singolo elemento nell’array è un’intestazione specifica.

$header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']];

Abbiamo definito due intestazioni, una per il tipo di contenuto e una per la chiave API.

Quindi possiamo definire il corpo della richiesta.

$body = json_encode([
    "url" => "google.com",
    "proxyCountry" => "us",
    "followRedirect" => true
]);

Dopo questo, possiamo creare una sessione curl usando la funzione curl_init(). Possiamo passare l’URL a cui vogliamo effettuare la richiesta come argomento per la chiamata di funzione.

$ch = curl_init("https://api.winadmin.it.com/loadtime");

Ora possiamo mettere insieme tutto definendo l’intestazione e il corpo come opzioni per la sessione. Per questo, useremo la funzione curl_setopt_array()

curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => $header,
    CURLOPT_POSTFIELDS => $body
]);

Per effettuare la richiesta, chiameremo la funzione curl_exec()

$response = curl_exec($ch);

Abbiamo memorizzato la risposta nella variabile $response, in modo da poter chiudere la sessione per liberare le risorse di sistema utilizzate dalla sessione.

curl_close($ch);

Infine, possiamo stampare la risposta sullo schermo usando var_dump.

var_dump($response);

Alla fine, il tuo file di script dovrebbe assomigliare a questo

<?php
    require_once('vendor/autoload.php');

    $dotenv = DotenvDotenv::createImmutable(__DIR__);
    $dotenv->load();

    $header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']];

    $body = json_encode([
        "url" => "google.com",
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $ch = curl_init("https://api.winadmin.it.com/loadtime");

    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_POSTFIELDS => $body
    ]);

    $response = curl_exec($ch);

    curl_close($ch);

    var_dump($response);
?>

Quando eseguiamo lo script usando php with_curl.php, dovresti ottenere il seguente output:

{"timestamp":1666083632547,"apiStatus":"success","apiCode":200,"meta":{"url":"google.com","followRedirect":true,"redirectedURL":"https://www.google.com/?gws_rd=ssl","test":{"id":"d20h1hb409qbfwm0g534l51asugpi5hl"}},"data":{"dns":12,"connect":17,"tls":6,"send":21,"wait":110,"total":114}}bool(true)

La richiesta è stata completata correttamente e l’API ha risposto con i dati JSON0. Puoi utilizzare questi dati a tuo piacimento.

Con Guzzle

Nell’ultima parte di questo tutorial, useremo Guzzle per scrivere lo script. Come sempre, iniziamo inserendo il boilerplate PHP all’interno di with_guzzle.php

<?php
    // all the code will go here
?>

Quindi, possiamo importare estensioni e Guzzle Client e Request Objects e caricare variabili ambientali.

require_once('vendor/autoload.php');

use GuzzleHttpClient;
use GuzzleHttpPsr7Request;

Successivamente, possiamo caricare le variabili ambientali.

$dotenv = DotenvDotenv::createImmutable(__DIR__);
$dotenv->load();

Successivamente, possiamo creare un’istanza di un client HTTP Guzzle

$client = new GuzzleHttpClient();

Quindi possiamo procedere alla creazione di intestazioni per la nostra richiesta

$headers = [
    'x-api-key' => $_ENV['API_KEY'],
    'Content-Type' => 'application/json'
];

Successivamente, possiamo definire il corpo della richiesta

$body = json_encode([
    "url" => "google.com",
    "proxyCountry" => "us",
    "followRedirect" => true
]);

Possiamo quindi effettuare la richiesta istanziando la classe Request e passando l’URL, l’intestazione e il corpo dell’endpoint API.

$request = new Request('POST', 'https://api.winadmin.it.com/loadtime', $headers, $body);

Quindi possiamo inviare la richiesta aggiungendo questa riga di codice:

$response = $client->sendAsync($request)->wait();

Una volta inviata la richiesta, possiamo ricevere il corpo della richiesta come segue

$response_body = $response->getBody();

Alla fine, possiamo decodificare la risposta JSON e stampare il tempo di caricamento

echo "Loadtime: " . json_decode($response_body)->data->total . "n";

Quindi, alla fine, il file dovrebbe assomigliare a questo:

<?php
    require_once('vendor/autoload.php');

    use GuzzleHttpClient;
    use GuzzleHttpPsr7Request;

    $dotenv = DotenvDotenv::createImmutable(__DIR__);
    $dotenv->load();
    

    $client = new GuzzleHttpClient();

    $headers = [
        'x-api-key' => $_ENV['API_KEY'],
        'Content-Type' => 'application/json'
    ];

    $body = json_encode([
        "url" => "google.com",
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $request = new Request('POST', 'https://api.winadmin.it.com/loadtime', $headers, $body);

    $response = $client->sendAsync($request)->wait();

    $response_body = $response->getBody();

    echo "Loadtime: " . json_decode($response_body)->data->total . "n";
?>

E quando esegui lo script usando il seguente comando:

$php with_guzzle.php

E vedrai la risposta:

Loadtime: 130

Conclusione

In questo articolo, abbiamo esaminato i diversi client che potresti voler utilizzare durante la creazione di un progetto PHP che richiederà l’API winadmin.it.

Mentre gli script in questo progetto utilizzano la riga di comando come forma principale di output, i progetti del mondo reale potrebbero presentare la risposta su una pagina Web o scriverla in un file. Gli script di esempio in questo articolo erano semplici, ma illustrano i concetti fondamentali dell’utilizzo dell’API winadmin.it. Per utilizzare API diverse, puoi modificare l’endpoint e passare diverse opzioni nel corpo della richiesta.

Potresti anche essere interessato a come utilizzare l’API di ricerca DNS winadmin.it in Javascript.