2016-10-31 4 views
1

Ich habe ein Problem in senden Restful Anfrage an HotelsPro Web-Service.Authentifizierung Anmeldeinformationen wurden nicht zur Verfügung gestellt Problem

Iam versuchen Anfrage zu diesem Link https://api-test.hotelspro.com:443 mit grundlegenden Anmeldeinformationen zu senden, aber ich erhalte Fehler jedes Mal „Authentifizierungsinformationen nicht zur Verfügung gestellt wurden“, obwohl diese Berechtigungsnachweise auf browser.My Code arbeitet wie folgt

sub getJSONdata { 

    my ($SupplierXMLServer, $message, $compressed,$timeOut) =(); 
     ($SupplierXMLServer, $message, $compressed,$timeOut) = @_; 

    $SupplierXMLServer='https://api-test.hotelspro.com/api/v2/search/?destination_code=20b05&checkin=2016-11-09&checkout=2016-11-12&currency=USD&client_nationality=PS&pax=2'; 

    my $username = "Epilgrim"; 
    my $password = "xxxxxxxxxx"; 

    use LWP::UserAgent; 
    my $userAgent = LWP::UserAgent->new(agent =>"1"); 
     $userAgent->credentials('https://api-test.hotelspro.com:443', 'api', $username , $password); 
     $userAgent->timeout($timeOut) if($timeOut); # in seconds 
    use HTTP::Request::Common; 
    my $response = ''; 
    if($compressed){ 
     $response = $userAgent->request(GET $SupplierXMLServer, 
              Content_Type => 'application/json', 
              Accept_Encoding => "gzip,deflate", 
              Content => $message); 
    } 
    else{ 
     $response = $userAgent->request(GET $SupplierXMLServer, 
              Content_Type => 'application/json', 
              Content => $message); 
    } 
    return $response->error_as_HTML unless $response->is_success; 
     #return $response->content; 

    if($compressed){ 
    return $response->decoded_content; 
    } 

    else{ 
     return $response->content; 
     } 
    } 

Bitte helfen Ich schreibe den richtigen Code und sende die Anfrage in korrekter Weise, um eine gültige Antwort zu erhalten.

+0

In Ihrem Aufruf von 'credentials', können Sie versuchen, das Protokoll zu entfernen - es sollte das Format' hostname: port' haben - dh ''api-test.hotelspro.com: 443'' Siehe http://stackoverflow.com/questions/1799147/why-dont-my-lwpuseragent-credentials-work – ardavey

Antwort

1

Der angegebene Link leitet an https://api-test.hotelspro.com/login/?next=/ weiter, der eine formularbasierte Authentifizierungsseite sucht. In Ihrem Perl-Skript versuchen Sie jedoch die Standardauthentifizierung. Bitte überprüfen Sie Google, um den Unterschied zwischen Basic Auth vs Form Based Auth zu verstehen.

Jetzt, um Form Based Auth durchzuführen, ist es besser, WWW :: Mechanize zu verwenden, das ein Wrapper um LWP ist, aber bequemere Methoden bietet. Es folgt ein Beispielcode für formularbasierte Authentifizierungs rechts von WWW::Mechanize's official help page:

#!/usr/bin/perl -w -T 

use strict; 
use WWW::Mechanize; 

my $login = "login_name"; 
my $password = "password"; 
my $folder = "folder"; 

my $url = "http://img78.photobucket.com/albums/v281/$login/$folder/"; 

# login to your photobucket.com account 
my $mech = WWW::Mechanize->new(); 
$mech->get($url); 
$mech->submit_form(
    form_number => 1, 
    fields  => { password => $password }, 
); 
die unless ($mech->success); 

# upload image files specified on command line 
foreach (@ARGV) { 
    print "$_\n"; 
    $mech->form_number(2); 
    $mech->field('the_file[]' => $_); 
    $mech->submit(); 
} 

hoffe, das hilft!

Verwandte Themen