PHP

Les exemples de cette section utilisent le langage de script côté serveur PHP, une langue populaire pour les pages Web dynamiques. PHP a fonctions cURL, ainsi que des fonctions XML, ce qui en fait une méthode pratique pour effectuer un traitement par lots via l’interface REST Geoserver. Les scripts suivants vont exécuter des demandes individuelles, mais peuvent être facilement modifiés avec une boucle afin d’effectuer un traitement par lots.

Note

Afin d’exécuter l’exemples il suffit de copier le script contenu dans un fichier test.php et exécutez la commande suivante :

$ php test.php

POST avec PHP et cURL

Le script suivant tente d’ajouter un nouveau workspace.

<?php
    // Open log file
    $logfh = fopen("GeoserverPHP.log", 'w') or die("can't open log file");

    // Initiate cURL session
    $service = "http://localhost:8080/geoserver/"; // replace with your URL
    $request = "rest/workspaces"; // to add a new workspace
    $url = $service . $request;
    $ch = curl_init($url);

    // Optional settings for debugging
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //option to return string
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_STDERR, $logfh); // logs curl messages

    //Required POST request settings
    curl_setopt($ch, CURLOPT_POST, True);
    $passwordStr = "admin:geoserver"; // replace with your username:password
    curl_setopt($ch, CURLOPT_USERPWD, $passwordStr);

    //POST data
    curl_setopt($ch, CURLOPT_HTTPHEADER,
              array("Content-type: application/xml"));
    $xmlStr = "<workspace><name>test_ws</name></workspace>";
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlStr);

    //POST return code
    $successCode = 201;

    $buffer = curl_exec($ch); // Execute the curl request

    // Check for errors and process results
    $info = curl_getinfo($ch);
    if ($info['http_code'] != $successCode) {
      $msgStr = "# Unsuccessful cURL request to ";
      $msgStr .= $url." [". $info['http_code']. "]\n";
      fwrite($logfh, $msgStr);
    } else {
      $msgStr = "# Successful cURL request to ".$url."\n";
      fwrite($logfh, $msgStr);
    }
    fwrite($logfh, $buffer."\n");

    curl_close($ch); // free resources if curl handle will not be reused
    fclose($logfh);  // close logfile

?>

Le fichier journal doit ressembler à:

* About to connect() to www.example.com port 80 (#0)
*   Trying 123.456.78.90... * connected
* Connected to www.example.com (123.456.78.90) port 80 (#0)
* Server auth using Basic with user 'admin'
> POST /geoserver/rest/workspaces HTTP/1.1
Authorization: Basic sDsdfjkLDFOIedlsdkfj
Host: www.example.com
Accept: */*
Content-type: application/xml
Content-Length: 43

< HTTP/1.1 201 Created
< Date: Fri, 21 May 2010 15:44:47 GMT
< Server: Apache-Coyote/1.1
< Location: http://www.example.com/geoserver/rest/workspaces/test_ws
< Content-Length: 0
< Content-Type: text/plain
<
* Connection #0 to host www.example.com left intact
# Successful cURL request to http://www.example.com/geoserver/rest/workspaces

* Closing connection #0

Si la demande de cURL échoue, un autre code que 201 sera retourné. Voici quelques valeurs possibles :

Code

Signification

0

Si vous ne pouvait pas résoudre hôte ; peut-être une faute de frappe dans le nom d’hôte

201

POST avec succès

30x

Procédure de redirection ; peut-être une faute de frappe dans l’URL

401

Nom d’utilisateur ou mot de passe incorrect

405

Méthode non autorisée : vérifier la syntaxe de requête

500

GeoServer est incapable de traiter la requête, par exemple le workspace existe déjà, le fichier xml est incorrect...

Pour voir d’autres codes , cURL Codes d’erreur et Codes HTTP.

GET avec PHP et cURL

Le script ci-dessus peut être modifié pour effectuer une requête GET pour obtenir les noms de tous les espaces de travail en remplaçant les blocs de code pour les paramètres requis, code données et retour par le texte suivant :

<?php
    // Required GET request settings
    // curl_setopt($ch, CURLOPT_GET, True); // CURLOPT_GET is True by default

    //GET data
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/xml"));

    //GET return code
    $successCode = 200;
?>

Le fichier journal doit maintenant inclure des lignes comme:

> GET /geoserver/rest/workspaces HTTP/1.1

< HTTP/1.1 200 OK

DELETE avec PHP et cURL

Pour supprimer le workspace (vide), que nous venons de créer, le script est modifié comme suit :

<?php
    $request = "rest/workspaces/test_ws"; // to delete this workspace
?>
<?php
    //Required DELETE request settings
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
    $passwordStr = "admin:geoserver"; // replace with your username:password
    curl_setopt($ch, CURLOPT_USERPWD, $passwordStr);

    //DELETE data
    curl_setopt($ch, CURLOPT_HTTPHEADER,
              array("Content-type: application/atom+xml"));

    //DELETE return code
    $successCode = 200;
?>

Le fichier journal comprendra des lignes comme:

> DELETE /geoserver/rest/workspaces/test_ws HTTP/1.1

< HTTP/1.1 200 OK