2014-12-16 3 views
0

Я очень новичок в Perl и очень нуждаюсь в помощи. У меня есть файл.txt, где я хочу разместить его содержимое в URL-адресе webservice.Как опубликовать содержимое файла с помощью Perl Script

Это образец моего файла file.txt.

 
Name: name1 
Address: address1 

Name: name2 
Address: address2 

Name: name3 
Address: address3 

А вот мой post.pl (ссылки с этого сайта: http://xmodulo.com/how-to-send-http-get-or-post-request-in-perl.html)

#!/usr/bin/perl 
use warnings; 
use strict; 
use LWP::UserAgent; 

my $ua = LWP::UserAgent->new; 
my $url = "https://domain/post.php"; 

# set custom HTTP request header fields 
my $req = HTTP::Request->new(POST => $url); 
$req->content_type('application/json'); 

# add POST data to HTTP request body 
my $post_data = '{"name":"myName", "address":"myAddress"}'; // I want to post here the content of file.txt 
$req->content($post_data); 
print $req->as_string; 
my $resp = $ua->request($req); 

    if ($resp->is_success) { 
    my $message = $resp->decoded_content; 
     print "\nReceived reply: $message\n"; 
    } 
    else { 
     print "HTTP POST error code: ", $resp->code, "\n"; 
     print "HTTP POST error message: ", $resp->message, "\n"; 
    } 

Используя вышеуказанный файл и сценарий, как я могу возможно разместить содержимое файла. Спасибо заранее.

ответ

0

Прочтите содержимое из файла, как показано ниже.

use strict; 
use warnings; 
use utf8; 

open my $fh, '<', '/path/to/file.json' or die "failed to open: $!"; 
my $content = do { local $/; <$fh> }; 
close $fh; 

Или

use File::Slurp; 
my $content = read_file('/path/to/file.json'); 
0

ОК, во-первых, я хотел бы сказать, что формат ваш file.txt находится, не очень интуитивный формат, потому что это не в любом стандартном формате, поэтому мы не можем просто вызвать общие библиотеки, которые выполняют CSV или JSON. В любом случае, вам по существу нужно построить функцию синтаксического анализа.

sub parse_file { 
    my ($filename) = @_; 

    open(FILE, $filename) or die sprintf ("Could not open '%s' (%s)", $filename, $!)); 

    my $string = ''; 
    my @args; 

    foreach my $line (<FILE>) { 
     chomp($line); 

     # Assumes that every record is separated by a blank line. 
     if ($line) { 
      my ($keyname, $value) = split(':', $line); 

      # Remove empty spaces left and right 
      $keyname =~ s/^\s+|\s+$//g; 
      $value =~ s/^\s+|\s+$//g; 

      $string = ($string) 
       ? $string.', '.sprintf('"%s":"%s"', $keyname, $value); 
       : sprintf('"%s":"%s"', $keyname, $value); 
     } 
     else { 
      # When we have a blank line, store the string we have concatenated. 
      push (@args, sprintf("{%s}", $string); 
      $string = ''; # Reset the string for the next record 
     } 
    } 

    close(FILE) or die sprintf ("Could not close '%s' (%s)", $filename, $!)); 

    return (wantarray) ? @args : \@args; 
} 

Из аргументов, которые возвращаются из этой функции, вы можете пойти

my @post_args = parse_file($path_to_your_file); 
foreach my $post_arguments (@post_args) { 
    # Call your HTTP request to set post_arguments and post the form 
} 
+0

Не знаете, почему вы беспокоитесь о разборе файла. Весь вопрос заключается в том, как отправить POST файл в веб-службу. Это зависит от того, что удаленный веб-сервис справляется с разбором файла и делает с ним что-то полезное :-) –

2

Вы можете использовать метод post() от LWP::UserAgent сделать это гораздо проще. Внизу он использует метод POST() от HTTP::Request::Common, поэтому вы можете посмотреть там для получения более подробной информации о том, как он обрабатывает загрузки файлов.

#!/usr/bin/perl 
use warnings; 
use strict; 
use LWP::UserAgent; 

my $ua = LWP::UserAgent->new; 
my $url = 'https://domain/post.php'; 

# The name of the file input field on the HTML form/ 
# You'll need to change this to whatever the correct name is. 
my $file_input = 'file-input'; 

# Path to the local file that you want to upload 
my $file_path = '/path/to/some/file'; 

my $req = $ua->post($url, 
    Content_Type => 'form-data', 
    Content => [ 
    $file_input => [ $file_path ], 
    ], 
); 

Вам даже не нужно открывать файл самостоятельно - HTTP :: Request :: Common делает это для вас.

 Смежные вопросы

  • Нет связанных вопросов^_^