在Perl中实现Tapatalk图像上传

时间:2014-09-23 10:48:42

标签: perl postgresql file-upload upload httprequest

我正在使用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);

但我还没有成功。请帮助我,如果有人以前做过。如果您有关于图片上传的示例代码,请分享。

1 个答案:

答案 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::RequestHTTP::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响应。

希望有所帮助!