繁体   English   中英

在Perl脚本中实现自定义Curl身份验证

[英]Implementing custom Curl authentication in Perl script

我正在构建试图使用Perl脚本实现curl请求的bot应用程序,我遇到的问题是授权问题。

简单的curl命令类似。

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

我宁愿不要使用Perl脚本中的system()调用,因为在用户和机器人之间会有很多来回的回响。

我发现了这个库http://search.cpan.org/~szbalint/WWW-Curl-4.17/lib/WWW/Curl.pm

我正在寻找setopt函数,以找出它接受哪些参数,因为我的问题是将Authorization参数放置在命令中的位置。 我发现此链接http://web.mit.edu/darwin/src/modules/curl/curl/perl/Curl_easy/easy.pm

现在,我的脚本代码如下所示:

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

我只需要知道我应该使用哪个CURLOPT来实现授权。 如果您有什么好主意。

谢谢伊兰·格罗斯

如果只想设置标题“ Authorization”,则选项为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;

得到:

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

但是,如果您实际上想执行HTTP身份验证,则可以使用CURLOPT_USERPWDCURLOPT_HTTPAUTH 有关选项的更多信息,请参见https://curl.haxx.se/libcurl/c/curl_easy_setopt.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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