Nano Hash - криптовалюты, майнинг, программирование

Передача Perl CGI переменной в сообщении с JSON

Я в недоумении, как заставить нижеприведенное работать, и у меня закончились идеи. Я успешно использовал эту настройку раньше, но с JS-скриптом между двумя скриптами, и в настоящее время я не могу использовать эту реализацию.

Первый сценарий используется для сбора данных от пользователя с помощью сценария perl, и он должен отправлять данные в параметр CGI второго сценария, но он либо не передает значения, либо они пусты. Я получаю HTTP-ответ 200, так что это не проблема с выполнением второго скрипта.

Скрипт 1:

#!/usr/bin/perl

        use LWP::UserAgent;

        my $ua = LWP::UserAgent->new;

        my $server_endpoint = "http://urlthatisaccessable.tld/script.pl";   

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

# add POST data to HTTP request body
my $post_data = '{ "name": "Dan" }';
$req->content($post_data);

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

Скрипт 2:

#!/usr/bin/perl
# Title Processor.pl

use CGI;

my $cgi = CGI->new;                  
my $local = $cgi->param("name");         

print $cgi->header(-type => "application/json", -charset => "utf-8");
print "$local was received"; 

Выход:

#perl stager.pl 
Received reply:  was received

Итак, 200 получено, а переменная $local пуста. Я распечатал его в файл журнала, и была вставлена ​​пустая строка.

Заранее спасибо за помощь в этом.

26.10.2013

  • Похоже, вы передаете скрипту параметры без urlencoded, см. этот perldoc.perl. org/CGI.html#HANDLING-NON-URLENCODED-ARGUMENTS 26.10.2013
  • Что ж, я проделал половину пути, так как допустимо следующее: perl processor.pl name=test Content-Type: text/plain; Был получен тест charset=ISO-8859-1, поэтому проблема была вызвана не-urlencoded-argues. Спасибо @Suic 26.10.2013

Ответы:


1

Из CGI,

Если данные POST не относятся к типу application/x-www-form-urlencoded или multipart/form-data, то данные POST не будут обрабатываться, а вместо этого будут возвращены как есть в параметре с именем POSTDATA. Чтобы получить его, используйте такой код:

my $data = $query->param('POSTDATA');

Поэтому, если вы хотите изменить сервер для работы с существующим клиентом, используйте

my $local = $cgi->param("POSTDATA"); 

Если вы хотите изменить клиент для работы с существующей серверной частью, вам нужно создать форму

use HTTP::Request::Common qw( POST );

my $req = POST($server_endpoint,
   Content_Type => 'application/json',
   Content => [ name => $post_data ],
);

Если есть выбор, первое (смена клиента) проще.

26.10.2013
  • @ikegami Я пошел с изменением клиента к нам HTTP::Request::Common qw( POST ), так как это кажется лучше подходящим для моих нужд. Спасибо еще раз за помощь 27.10.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..