2016-07-22 11 views
1

Ich bin Bot-Anwendung erstellen versuchen, Perl-Skript verwenden, um die Curl-Anfrage zu implementieren, das Problem, das ich habe, ist mit der Autorisierung.Implementieren benutzerdefinierter Curl-Authentifizierung in Perl-Skript

Der einfache Curl-Befehl ist etwas wie.

curl \ 
    -H 'Authorization: Bearer VM2CKBMXI3AVX2GMYPLBMYFRW3RCHYXS' \ 
    'https://api.wit.ai/message?v=20160722&q=' 

I bevorzugt nicht System zu verwenden() ruft aus dem Perl-Skript, da es viele kommen wieder und her zwischen dem Nutzer und der Bot.

Ich fand diese Bibliothek http://search.cpan.org/~szbalint/WWW-Curl-4.17/lib/WWW/Curl.pm

Ich war für setopt Funktion, um die Suche, um herauszufinden, welche params ist es zu akzeptieren, wie mein Problem, ist die Autorisierung param innerhalb des Befehls zu setzen. fand ich den Link http://web.mit.edu/darwin/src/modules/curl/curl/perl/Curl_easy/easy.pm

My Script-Code für jetzt ist es wie folgt lautet:

use strict; 
use warnings; 
use WWW::Curl::Easy; 

my $curl = WWW::Curl::Easy->new; 
my $Authorization="Authorization: Bearer VM2CKBMXI3AVX2GMYPLBMYFRW3RCHYXS"; 

$curl->setopt(CURLOPT_HEADER,1); 
$curl->setopt(CURLOPT_URL, 'https://api.wit.ai/message?v=20160721&q=hello'); 

# A filehandle, reference to a scalar or reference to a typeglob can be used here. 
my $response_body; 
$curl->setopt(CURLOPT_WRITEDATA,\$response_body); 

# Starts the actual request 
my $retcode = $curl->perform; 

# Looking at the results... 
if ($retcode == 0) { 
    print("Transfer went ok\n"); 
    my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE); 
    # judge result and next action based on $response_code 
    print("Received response: $response_body\n"); 
} else { 
    # Error code, type of error, error message 
    print("An error happened: $retcode ".$curl->strerror($retcode)." ".$curl->errbuf."\n"); 
} 

Ich muss nur wissen, welche CURLOPT sollte ich nutzen, um benötigen die Berechtigung zu implementieren. Wenn Sie eine Idee haben, wird das großartig.

Dank Eran Gross

Antwort

2

Wenn Sie den Header "Autorisierung" nur gesetzt werden soll die Option CURLOPT_HTTPHEADER:

#!/usr/bin/perl 
use strict; 
use warnings; 
use WWW::Curl::Easy; 
my $curl = WWW::Curl::Easy->new; 
$curl->setopt(CURLOPT_URL, 'http://127.0.0.1/dumprequest.php'); 
my @headers = ("Authorization: keygoeshere", "X-Foo: Bah"); 
$curl->setopt(CURLOPT_HTTPHEADER, \@headers); 
$curl->setopt(CURLOPT_HEADER, 1); 
my $retcode = $curl->perform; 

Gibt:

GET dumprequest.php HTTP/1.1 
Host: 127.0.0.1 
Accept: */* 
Authorization: keygoeshere 
X-Foo: Bah 

Aber wenn Sie tatsächlich HTTP-Authentifizierung dann würden Sie CURLOPT_USERPWD und CURLOPT_HTTPAUTH verwenden. Weitere Informationen zu Optionen finden Sie unter https://curl.haxx.se/libcurl/c/curl_easy_setopt.html.

Verwandte Themen