简体   繁体   中英

Implementing custom Curl authentication in Perl script

I am building bot application trying to use perl script to implement the curl request, the issue I have is with Authorization.

The simple curl command is something like.

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

I preferred not to use system() calls from the Perl script as there will be plenty of back and forth between the user and the bot.

I found this library http://search.cpan.org/~szbalint/WWW-Curl-4.17/lib/WWW/Curl.pm

I was searching for setopt function in order to find out which params does it accept as my issue is where to put the Authorization param inside the command. I found this link http://web.mit.edu/darwin/src/modules/curl/curl/perl/Curl_easy/easy.pm

My Script code for now it is like the following:

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");
}

I just need to know which CURLOPT should I need to use in order to implement authorization. If you have any idea that will be great.

Thanks Eran Gross

If you just want to set the header "Authorization" the option is 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;

Gives:

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

But if you actually want to do HTTP authentication then you would use CURLOPT_USERPWD and CURLOPT_HTTPAUTH . See https://curl.haxx.se/libcurl/c/curl_easy_setopt.html for more info on options.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM