Strontium
Member
Beispielcode ISPConfig Remote API für PHP, Python, Perl, Rust
Perl:
#!/usr/bin/env perl
use strict;
use warnings;
use LWP::UserAgent;
use JSON;
use HTTP::Request::Common;
use IO::Socket::SSL;
# SSL-Zertifikatsüberprüfung deaktivieren
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
IO::Socket::SSL::set_defaults(SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE);
# Zuerst ISPConfig Remote-User mit "Sites Domain functions" anlegen!
# Konfiguration
my $base_url = 'https://192.168.0.14:8080/remote/json.php';
my $username = 'ispconfigremoteuser';
my $password = 'secretpassword';
my $client_id = 1;
my $server_id = 1;
# Parameter für die Website-Erstellung
my $params = {
server_id => $server_id, # (int) ID des Servers, auf dem die Domain hinzugefügt werden soll
ip_address => '*', # (varchar) IP-Adresse der Domain, Standard '*'
domain => 'apitestdomain.com', # (varchar) Domainname
type => 'vhost', # (varchar) Typ der Domain: 'vhost', 'alias', 'vhostalias', 'subdomain', 'vhostsubdomain'
parent_domain_id => 0, # (int) ID der übergeordneten Domain, falls es sich um eine Subdomain handelt
vhost_type => 'name', # (varchar) Typ des vhost: 'name'
hd_quota => 100000, # (bigint) Festplattenkontingent in MB, -1 für unbegrenzt
traffic_quota => -1, # (bigint) Verkehrskontingent in MB, -1 für unbegrenzt
cgi => 'y', # (enum) CGI-Unterstützung: 'y' (Standard), 'n'
ssi => 'y', # (enum) SSI-Unterstützung: 'y' (Standard), 'n'
suexec => 'y', # (enum) SuExec-Unterstützung: 'y' (Standard), 'n'
errordocs => 1, # (tinyint) Eigene Fehlermeldungsseiten: 1 (aktiviert), 0 (Standard)
is_subdomainwww => 1, # (tinyint) 'www' als Subdomain, 1 (aktiviert), 0 (deaktiviert)
subdomain => 'none', # (enum) 'none' (Standard), 'www', '*'
php => 'php-fpm', # (enum) PHP-Unterstützung: 'no', 'fast-cgi', 'php-fpm' (Standard)
ruby => 'n', # (enum) Ruby-Unterstützung: 'y', 'n' (Standard)
redirect_type => '', # (varchar) Typ der Weiterleitung, z.B. 'no', 'R', 'L', 'redirect'
redirect_path => '', # (varchar) Ziel der Weiterleitung, falls 'redirect_type' gesetzt ist
ssl => 'n', # (enum) SSL-Unterstützung: 'y', 'n' (Standard)
ssl_letsencrypt => 'n', # (enum) Let's Encrypt SSL-Zertifikat: 'y', 'n' (Standard)
ssl_state => '', # (varchar) SSL-Zertifikatsdetails, z.B. Bundesland
ssl_locality => '', # (varchar) SSL-Zertifikatsdetails, z.B. Stadt
ssl_organisation => '', # (varchar) SSL-Zertifikatsdetails, z.B. Organisation
ssl_organisation_unit=> '', # (varchar) SSL-Zertifikatsdetails, z.B. Abteilung
ssl_country => '', # (varchar) SSL-Zertifikatsdetails, z.B. Land (2 Buchstaben)
ssl_domain => '', # (varchar) Domainname des SSL-Zertifikats
ssl_request => '', # (mediumtext) SSL-Zertifikatsanforderung
ssl_key => '', # (mediumtext) SSL-Zertifikatschlüssel
ssl_cert => '', # (mediumtext) SSL-Zertifikat
ssl_bundle => '', # (mediumtext) SSL-Zertifikats-Bundle
ssl_action => '', # (varchar) SSL-Aktion: 'show', 'save', 'create', 'delete'
stats_password => '', # (varchar) Passwort für Statistiken
stats_type => '', # (varchar) Typ der Statistiken: '' (Standard), 'goaccess'
storage_time_log_files => 7, # (int) Aufbewahrungszeit für Protokolldateien in Tagen
allow_override => 'All', # (varchar) 'AllowOverride'-Richtlinien für Apache, z.B. 'None', 'All'
apache_directives => '', # (mediumtext) Zusätzliche Apache-Direktiven
php_open_basedir => '/', # (mediumtext) PHP open_basedir-Einstellung
custom_php_ini => '', # (mediumtext) Benutzerdefinierte PHP.ini-Einstellungen
pm => 'ondemand', # (enum) PHP-FPM Prozessmanager: 'static', 'dynamic', 'ondemand' (Standard)
pm_max_children => 500, # (int) Max. Anzahl der PHP-FPM-Kinderprozesse, Standard 500
pm_max_requests => 0, # (int) Max. Anzahl der Anfragen pro PHP-FPM-Kinderprozess, 0 für unbegrenzt
pm_process_idle_timeout => 5, # (int) Leerlaufzeit in Sekunden, Standard 5
custom_php_ini => '', # (mediumtext) Benutzerdefinierte PHP.ini-Einstellungen
backup_interval => 'daily', # (varchar) Intervall für Backups, z.B. 'daily', 'weekly'
backup_copies => 7, # (int) Anzahl der aufzubewahrenden Backups
active => 'y', # (enum) Aktivierung der Domain: 'y' (Standard), 'n'
traffic_quota_lock => 'n', # (enum) Sperre bei Erreichen des Verkehrskontingents: 'y', 'n' (Standard)
http_port => '80', # (int) HTTP-Port, Standard 80
https_port => '443', # (int) HTTPS-Port, Standard 443
tideways_sample_rate => 25, # (int) Tideways-Probenahmerate in Prozent
};
# UserAgent initialisieren
my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0 } );
# Login zur ISPConfig API
my $login_url = "$base_url?login";
my $login_payload = {
username => $username,
password => $password
};
my $response = $ua->post(
$login_url,
Content_Type => 'application/json',
Content => encode_json($login_payload)
);
if ($response->is_success) {
my $response_data = decode_json($response->decoded_content);
my $session_id = $response_data->{response};
print "Login erfolgreich: Session-ID: $session_id\n";
my $web_domain_payload = {
session_id => $session_id,
client_id => $client_id,
params => $params,
};
my $add_web_domain_url = "$base_url?sites_web_domain_add";
$response = $ua->post(
$add_web_domain_url,
Content_Type => 'application/json',
Content => encode_json($web_domain_payload)
);
if ($response->is_success) {
$response_data = decode_json($response->decoded_content);
if ($response_data->{response}) {
print "Website-Domain erfolgreich hinzugefügt. ID: $response_data->{response}\n";
} else {
print "Fehler beim Hinzufügen der Website-Domain: "
. ($response_data->{message} // 'Unbekannter Fehler')
. "\nAntwort: " . encode_json($response_data) . "\n";
}
} else {
print "HTTP-Fehler beim Hinzufügen der Website-Domain: "
. $response->status_line . "\n"
. "Antwort: " . $response->decoded_content . "\n";
}
my $logout_url = "$base_url?logout";
my $logout_payload = { session_id => $session_id };
$response = $ua->post(
$logout_url,
Content_Type => 'application/json',
Content => encode_json($logout_payload)
);
if ($response->is_success) {
print "Logout erfolgreich.\n";
} else {
print "Fehler beim Logout: " . $response->status_line . "\n";
}
} else {
print "Login fehlgeschlagen: " . $response->status_line . "\n"
. "Antwort: " . $response->decoded_content . "\n";
}
Zuletzt bearbeitet: