Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- #
- # Proxy auf ein SAP-System
- # (Alternative zum eingebauten CORS, Transaktion UCONCOCKPIT, falls dies im Release noch nicht möglich ist,
- # oder falls es im Unternehmen Restriktionen für die Pflege der Whitelists gibt).
- #
- # Der gewünschte URL-Pfad im Zielsystem wird in einem Query-Parameter "path" übergeben
- #
- # Von den Kopffeldern werden nur Status, Content-Type und Content-Length weitergeleitet (die beiden letzten auch im Request)
- use strict;
- use warnings;
- use CGI::Carp qw(fatalsToBrowser);
- use LWP::UserAgent;
- # Das Zielsystem
- use constant {
- SAP => 'http://sap-server.corp.ch:8000',
- CLIENT => '500'
- };
- # Allfällige Request-Parameter aus QUERY_STRING in %args einlesen
- my %args = ();
- my $path = "";
- foreach (split /&/, $ENV{QUERY_STRING}) {
- my ($name,$value) = split /\s*=\s*/;
- # Parameter 'path' wird hier für den Aufbau der URL verwendet und nicht weitergeleitet
- if ($name eq 'path') {
- $path = $value;
- next;
- }
- $args{$name} = $value;
- }
- # Zielmandant hinzufügen
- $args{'sap-client'}= CLIENT;
- # URL aufbauen
- my $ua = LWP::UserAgent->new;
- my $queryString = join("&", map { $_."=".$args{$_} } keys %args );
- my $url = SAP.$path."?".$queryString;
- my $response;
- # Bei POST-Request usw. auch den HTTP-Body übernehmen
- if ($ENV{REQUEST_METHOD} eq "GET") {
- $response = $ua->get( $url );
- }
- else {
- my $request = HTTP::Request->new( $ENV{REQUEST_METHOD}, $url );
- $request->header( 'Content-Type' => $ENV{CONTENT_TYPE} );
- read STDIN, my $content, $ENV{CONTENT_LENGTH};
- $request->content($content);
- $response = $ua->request( $request );
- }
- # HTTP-Antwort in STDOUT schreiben
- print "Status: ".$response->status_line."\n";
- my $contentType = $response->header('Content-Type');
- print "Content-Type: $contentType\n";
- my $contentLength = $response->header('Content-Length');
- print "Content-Length: $contentLength\n\n";
- print $response->decoded_content;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement