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