как отправить задание (файл последовательности) и получить результат в веб-сервере, используя curl - PullRequest
1 голос
/ 21 марта 2020

У меня есть последовательность постов

> seq1

UUUAAAAUCUGUGUAGCUGUCGCUCGGCUGCAUGCCUAGUGCACCUACGCAGUAUAAA

Хотите добавить это на веб-сервер *1001* * И затем получить результат (только таблицу результатов) из: http://bioinformatics.hitsz.edu.cn/iMiRNA-SSF/showresult.jsp в выходной текстовый файл.

Я попытался следующий код, который не работает.

post задание

curl -X POST -d 'seq1 \ nUUUAAAAUCUGUGUAGCUGUCGCUCGGCUGCAUGCCUAGUGCACCUACGCUGUAUAAA' http://bioinformatics.hitsz.edu.cn/iMiRNA-SSF/ -H "Тип содержимого: приложение / json"

получить * curl -X POST http://bioinformatics.hitsz.edu.cn/iMiRNA-SSF/showresult.jsp/response -H "Content-Type: text / plain"; эхо Не могли бы вы помочь. У меня есть 1000 таких последовательностей. Мне нужно автоматизировать его с терминала Linux. прикрепил скрипт perl, который работает не полностью. Любое предложение, редактировать?

#!/usr/bin/perl

use LWP::Simple;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;

# Script parameters


# Script hidden parameters
$idCon="12345";

# Sequences source file
# IMPORTANT! use standard fasta file format

$inputFile="file.fa";

# Maximum number of sequences per request
$maxNumOfSequences=1;  

# If you want to skip the N first requests
$skipRequests=0;

# Output files prefix
$outputFile="result_ssf";

# Promoter script URL 
$URL = "http://bioinformatics.hitsz.edu.cn/iMiRNA-SSF/";

# Header and bottom line
$header = "sequenceName; primaryStru; secondStru; Pvalue; Classification\n";

#$URL2 = "http://bioinformatics.hitsz.edu.cn/iMiRNA-SSF/showresult.jsp";

##################################################################################

# The browser

printf "Creating the browser...\n";
$browser = LWP::UserAgent->new();
$browser->timeout(30);

printf "Opening input file...\n";
open(SEQUENCES, "<".$inputFile) or die $!;

printf "Opening output file...\n";
open OUTPUTFILE, ">".$outputFile or die $!;
printf OUTPUTFILE $header;

$sequences = "";
$sequenceName="";
$currentSec=0;
$currentRequest=0;

printf "Sending request...\n";
while(<SEQUENCES>) {

        if ($sequenceName eq "") {
            $sequenceName = $_;
        } else {
            $sequences = $sequences.$sequenceName.$_;
            $currentSec = $currentSec+1;
            $sequenceName = "";
        }

        if ($currentSec == $maxNumOfSequences) {
           $currentRequest=$currentRequest+1;

           if ($currentRequest > $skipRequests ) {
            printf " # Request num. ".$currentRequest."\n";

                my $response = $browser->post($URL, 
                [   "Predict" => $sequences,
                    "uploadFile" => ""
                ], 
                "Content_Type" => "form-data"  );

                if ($response->is_error()) {
                    printf "%s\n", $response->status_line;
                    exit 1;
                }

                $response = $browser->post($URL, ["showresult.jsp"]);


                if ($response->is_error()) {
                    printf "%s\n", $response->status_line;
                    exit 1;
                }

                $contents = $response->content();
                #$contents =~ s/(<BR>\n|<BODY>|<\/BODY>|<HEAD>|<\/HEAD>|<HTML>|<\/HTML>|<META(.*)>|<TITLE>(.*)<\/TITLE>)//ig;
                $contents =~ s/(<BR>\n|<BODY>|<\/BODY>|<HEAD>|<\/HEAD>|<HTML>|<\/HTML>|<META(.*)>|<table>(.*)<\/table>)//ig;

                if ($contents =~ m/$header(.*)\n\n-/s) {
                    print OUTPUTFILE $1;
                    print OUTPUTFILE "\n";
                }

            }
            $currentSec = 0;
            $sequences = "";
        }
}



close OUTPUTFILE;
close SEQUENCES;

1 Ответ

1 голос
/ 21 марта 2020

Вам необходимо использовать -F для отправки multipart / form-data. Из-за многострочной строки в параметре testdata вам нужно будет сохранить данные в файле перед запуском команды .

Вам также необходимо сохранять файлы cookie между обоими вызовами, поскольку сервер хранит информацию о заданиях (обработка которых приводит к этому результату):

echo -ne ">seq1\nUUUAAAAUCUGUGUAGCUGUCGCUCGGCUGCAUGCCUAGUGCACCUACGCAGUAUAAA" > test.txt

curl -v -c cookie.txt 'http://bioinformatics.hitsz.edu.cn/iMiRNA-SSF/Receive.jsp' \
     -F "testdata=<test.txt" -F "Predict=Predict" -F "uploadFile="

curl -b cookie.txt 'http://bioinformatics.hitsz.edu.cn/iMiRNA-SSF/showresult.jsp'

Также вы можете удалить testdata параметр для использования только uploadFile:

echo -ne ">seq1\nUUUAAAAUCUGUGUAGCUGUCGCUCGGCUGCAUGCCUAGUGCACCUACGCAGUAUAAAC" > test.txt

curl -v -c cookie.txt 'http://bioinformatics.hitsz.edu.cn/iMiRNA-SSF/Receive.jsp' \
     -F "Predict=Predict" -F "uploadFile=@test.txt"

curl -b cookie.txt 'http://bioinformatics.hitsz.edu.cn/iMiRNA-SSF/showresult.jsp'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...