Ich denke, Sie sind nicht zu verstehen, was post '/upload'
tut und uploadtest.pl
ist.
Ihr Skript ist ein kleiner HTTP-Server, der Anfragen empfängt und Antworten gibt. Sie können Ihren Server permanent ausführen und Anfragen beispielsweise mit curl
ausführen oder eine Anfrage an ihn senden und beenden.
$ perl uploadtest.pl daemon
[Sat Jun 11 14:00:41 2016] [info] Listening at "http://*:3000"
Server available at http://127.0.0.1:3000
# in other shell
$ curl -X POST "http://localhost:3000/uploadtest.pl/status?Token=6d949625-2f07-1e7a-d57a-de0fa949035d"
Oder beides auf einmal:
$perl ./uploadtest.pl get -v -M POST /status?"Token=3780e99a-fc2c-54e5-2c31-417f945c1792"
Diese Stellen machen Anfragen zu einer dauerhaften (erstes Beispiel) oder onetime Server (zweite) mit leeren Inhalt
Wenn Sie Ihre curl laufen mit -v
Optionen:
$ curl -v -X POST "http://localhost:3000/status?Token=6d949625-2f07-1e7a-d57a-de0fa949035d"
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 3000 (#0)
> POST /status?Token=6d949625-2f07-1e7a-d57a-de0fa949035d HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:3000
> Accept: */*
>
< HTTP/1.1 200 OK
* Server Mojolicious (Perl) is not blacklisted
< Server: Mojolicious (Perl)
< Date: Sat, 11 Jun 2016 11:42:24 GMT
< Content-Length: 48
< Content-Type: text/html;charset=UTF-8
<
* Connection #0 to host localhost left intact
In process: 6d949625-2f07-1e7a-d57a-de0fa949035d
Sie können sogar tcpdump
tun, während Ihr Server abfragt:
$ sudo tcpdump -x -X -i lo port 3000
14:41:51.665032 IP localhost.49063 > localhost.3000: Flags [P.], seq 1:129, ack 1, win 342, options [nop,nop,TS val 1097613 ecr 1097613], length 128
0x0000: 4500 00b4 38c4 4000 4006 037e 7f00 0001 [email protected]@..~....
0x0010: 7f00 0001 bfa7 0bb8 3b17 8750 a281 4839 ........;..P..H9
0x0020: 8018 0156 fea8 0000 0101 080a 0010 bf8d ...V............
0x0030: 0010 bf8d 504f 5354 202f 7374 6174 7573 ....POST./status
0x0040: 3f54 6f6b 656e 3d36 6439 3439 3632 352d ?Token=6d949625-
0x0050: 3266 3037 2d31 6537 612d 6435 3761 2d64 2f07-1e7a-d57a-d
0x0060: 6530 6661 3934 3930 3335 6420 4854 5450 e0fa949035d.HTTP
0x0070: 2f31 2e31 0d0a 5573 6572 2d41 6765 6e74 /1.1..User-Agent
0x0080: 3a20 6375 726c 2f37 2e33 352e 300d 0a48 :.curl/7.35.0..H
0x0090: 6f73 743a 206c 6f63 616c 686f 7374 3a33 ost:.localhost:3
0x00a0: 3030 300d 0a41 6363 6570 743a 202a 2f2a 000..Accept:.*/*
0x00b0: 0d0a 0d0a ....
Wenn Sie Datei auf Ihren Server hochladen möchten, verwenden Sie -F [email protected]:/xml/test.xml
curl Option. Sie erwarten auch, können Sie gleiche onetime Anfrage tun, aber die nächste Befehl:
$perl ./uploadtest.pl get -v -M POST /upload?"Input_Type=XML&Input_File=d:/xml/test.xml"
nicht solche Option nicht unterstützt.
$perl ./uploadtest.pl help get
Usage: APPLICATION get [OPTIONS] URL [SELECTOR|JSON-POINTER] [COMMANDS]
./myapp.pl get/
./myapp.pl get -H 'Accept: text/html' /hello.html 'head > title' text
./myapp.pl get //sri:[email protected]/secrets.json /1/content
mojo get mojolicious.org
mojo get -v -r google.com
mojo get -v -H 'Host: mojolicious.org' -H 'Accept: */*' mojolicious.org
mojo get -M POST -H 'Content-Type: text/trololo' -c 'trololo' perl.org
mojo get mojolicious.org 'head > title' text
mojo get mojolicious.org .footer all
mojo get mojolicious.org a attr href
mojo get mojolicious.org '*' attr id
mojo get mojolicious.org 'h1, h2, h3' 3 text
mojo get https://api.metacpan.org/v0/author/SRI /name
Options:
-C, --charset <charset> Charset of HTML/XML content, defaults to
auto-detection
-c, --content <content> Content to send with request
-H, --header <name:value> Additional HTTP header
-h, --help Show this summary of available options
--home <path> Path to home directory of your application,
defaults to the value of MOJO_HOME or
auto-detection
-M, --method <method> HTTP method to use, defaults to "GET"
-m, --mode <name> Operating mode for your application, defaults to
the value of MOJO_MODE/PLACK_ENV or
"development"
-r, --redirect Follow up to 10 redirects
-v, --verbose Print request and response headers to STDERR
Wie Sie Hilfe finden können, können Sie kurze Textnachricht senden:
./uploadtest.pl get -M POST -H 'Content-Type: text/trololo' -c 'trololo' perl.org
Um Dateien in Ihrem uploadtest.pl
Server hochladen können Sie Ihre eigenen Uploader schreiben. Aus diesem Grund sollten Sie Mojo::UserAgent Modul verwenden.Example
use Mojo::UserAgent;
# Upload file via POST and "multipart/form-data"
my $ua = Mojo::UserAgent->new;
$ua->post("http://localhost:3000" => form => {Input_Type => "XML", Input_File => {file => "d:/xml/test.xml"}});
Aber das ist same wie:
perl -Mojo -E 'p("http://localhost:3000" => form => {Input_Type => "XML", Input_File => {file => "d:/xml/test.xml"}})'
UPD
Debug-Server-Seite Skript für Datei hochladen sollten Sie
perl -d uploadtest.pl daemon
Loading DB routines from perl5db.pl version 1.49_04
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
main::(tx.pl:6): get '/' => 'form';
DB<1>
Diese Sie in bringen perl debugger (Tutorial)
DB<1> l 1-30
1 #uploadtest.pl
2
3: use Mojolicious::Lite;
4
5 # Upload form in DATA section
6==> get '/' => 'form';
7
8
9 # Check status
10 post '/status' => sub {
11: my $self = shift;
12: my $Token = $self->param('Token');
13: $self->render(text => "In process: $Token");
14: };
15
16 # Multipart upload handler
17 post '/upload' => sub {
18: my $self = shift;
19
20 # Process uploaded file
21: my $Input_File = $self->param('Input_File');
22: my $Input_Type = $self->param('Input_Type');
23: my $size = $Input_File->size;
24: my $name = $Input_File->filename;
25: my $upload = $self->req->upload('Input_File');
26: $upload->move_to("d:/xml/$name"); #move location
27: $self->render(text => "Thanks for uploading $size byte file $name.");
28: };
29
30: app->start;
DB<2> b 11
DB<3> b 18
DB<4> l 1-30
1 #uploadtest.pl
2
3: use Mojolicious::Lite;
4
5 # Upload form in DATA section
6==> get '/' => 'form';
7
8
9 # Check status
10 post '/status' => sub {
11:b my $self = shift;
12: my $Token = $self->param('Token');
13: $self->render(text => "In process: $Token");
14: };
15
16 # Multipart upload handler
17 post '/upload' => sub {
18:b my $self = shift;
19
20 # Process uploaded file
21: my $Input_File = $self->param('Input_File');
22: my $Input_Type = $self->param('Input_Type');
23: my $size = $Input_File->size;
24: my $name = $Input_File->filename;
25: my $upload = $self->req->upload('Input_File');
26: $upload->move_to("d:/xml/$name"); #move location
27: $self->render(text => "Thanks for uploading $size byte file $name.");
28: };
29
30: app->start;
DB<5> c
[Tue Jun 14 16:43:06 2016] [info] Listening at "http://*:3000"
Server available at http://127.0.0.1:3000
[Tue Jun 14 16:43:10 2016] [debug] POST "/status"
[Tue Jun 14 16:43:10 2016] [debug] Routing to a callback
main::CODE(0x23f7be0)(tx.pl:11): my $self = shift;
DB<5> n
main::CODE(0x23f7be0)(tx.pl:12): my $Token = $self->param('Token');
DB<5> n
main::CODE(0x23f7be0)(tx.pl:13): $self->render(text => "In process: $Token");
DB<5> x $Token
0 '6d949625-2f07-1e7a-d57a-de0fa949035d'
DB<6>
Hier Liste ich Quelle von 1 bis 30 Linie l 1-30
, stellen zwei Stützpunkte b 11
b 18
, Liste Quelle wieder l 1-30
zu sehen, dass Haltepunkte in Kraft sind (Hinweis b in der Nähe der Linie), laufen Skript vom aktuellen Punkt (Notice ==> Zeichen in der Nähe der Linie) bis zum nächsten Unterbrechungspunkt, getan zwei Schritte mit n
Befehl und Ansicht Wert $ Token Variable mit x $Token
Befehl.
Beachten Sie, dass nach c
Skript warten Interaktion. Ich das mit curl
http://localhost:3000/status?Token=6d949625-2f07-1e7a-d57a-de0fa949035d
HINWEIS: Sie sollten verlangen '/ Status' und '/ upload' NICHT '/updater.pl/status' wie Sie. Es hat nichts mit dem äußeren Wort zu tun, wie Ihr Server-Skript benannt ist. Nur nur zwei Dinge:
- Wo Ihr Skript hören: localhost: 3000
- Welche Anforderung dienen kann: ‚/ upload‘ und ‚/ status‘
Wenn ich Ihren Titel geklickt Ich dachte, das ist Übergeben einer Datei als Befehlszeilenargument an die Anwendung beim Start. Nur um zu klären, möchten Sie eine Anfrage mit curl senden, die den Inhalt einer Datei als seinen Körper hat? Oder vielleicht nicht. Bitte [bearbeiten] Sie Ihre Frage und klären Sie. Auch, ist der Code, den Sie von upload_test.pl zeigen? – simbabque
Ich habe Curl als auch mojolicious Befehlszeile Beispiel gegeben, die ich versucht habe.Curl funktioniert gut, aber ich weiß nicht, wie man Befehl in mojolicious für Dateiinhalt als Argument verwenden. Könnten Sie mir bitte sagen, wie ich Datei als Befehlsargument in mojolicious übergeben werde? –