我正在使用Perl编写一个Tapatalk插件。我已经通过Tapatalk文档从tapatalk app https://tapatalk.com/api/api_section.php?id=8#upload.php
上传图像根据文档,我在plugin目录的根目录下有一个upload.cgi,当从tapatalk应用程序尝试上传图像时调用该目录。我在upload.cgi中获得了方法名称,forumid,附件图片名称。
但现在我很困惑如何处理所有在成功上传后在tapatalk app中显示上传的图像。如何处理upload.cgi的输入参数。如何将上传详细信息发布到upload.cgi
我已发布表格详情如下
my $req = POST '$upload_url',
Content_Type => 'form-data',
Content => [ method_name => 'upload_attach',
forum_id => $forumid,
"attachment[]" => [
undef,
$filename,
'Content-Type' => 'image/jpeg',
],
];
my $ua = LWP::UserAgent->new();
my $response = $ua->request($req);
但我还没有成功。请帮助我,如果有人以前做过。如果您有关于图片上传的示例代码,请分享。
答案 0 :(得分:0)
目前,您的脚本无效,因为$req
设置为此代码混搭,Perl不知道如何解释:
my $req = POST '$upload_url',
Content_Type => 'form-data',
Content => [ method_name => 'upload_attach',
forum_id => $forumid,
"attachment[]" => [
undef,
$filename,
'Content-Type' => 'image/jpeg',
],
];
如果要使用$ua->request()
,则需要创建HTTP::Request
对象。来自LWP::UserAgent
request
的文档:
$ua->request( $request )
此方法将调度给定的
$request
对象。通常这将是HTTP::Request
类的实例,但任何具有类似接口的对象都可以。返回值是响应对象。有关这些类提供的界面的说明,请参阅HTTP::Request
和HTTP::Response
。
来自HTTP::Request
的文档:
$r = HTTP::Request->new( $method, $uri, $header, $content )
使用方法
$uri
构造一个新的HTTP::Request
对象,用于描述对象$method
上的请求。$method
参数必须是字符串。$uri
参数可以是字符串,也可以是对URI对象的引用。可选的$header
参数应该是对HTTP::Headers
对象的引用或键/值对的普通数组引用。可选的$content
参数应该是一个字节字符串。
因此,重新格式化您的请求,我们得到以下信息:
my $req = HTTP::Request->new('POST', $upload_url,
[ Content_Type => 'form-data' ],
Content => [
method_name => 'upload_attach',
forum_id => $forumid,
"attachment[]" => [
undef,
'this.jpg',
'Content-Type' => 'image/jpeg',
],
]);
将所有内容插入脚本:
use strict;
use warnings;
use LWP::UserAgent;
my $upload_url = 'http://example.com';
my $forum_id = '1a2b3c4d5e';
my $ua = LWP::UserAgent->new();
my $req = HTTP::Request->new('POST', $upload_url,
[ Content_Type => 'form-data' ],
Content => [
method_name => 'upload_attach',
forum_id => $forum_id,
"attachment[]" => [
undef,
'this.jpg',
'Content-Type' => 'image/jpeg',
],
]);
my $response = $ua->request($req);
if ($response->is_success) {
# do whatever with $response->decoded_content
}
else {
print STDERR "POST failed: " . $response->status_line . "\n";
}
您可以使用$response->as_string
查看原始HTTP响应。
希望有所帮助!