Avatar billede engberg Juniormester
16. april 2000 - 19:32 Der er 32 kommentarer og
2 løsninger

Program der kan....

Hejsa

Jeg skal bruge et perl prog der kan:
1) open socket
2) connect to server
3) construct request
4) read in file (binary mode) and put it into the body
5) send to server

Det skal blive et program der kan sende en fil til en server (ala FTP) en gang i minuttet. Grunden til programmet er at jeg ikke har FTP og jeg vil gerne bruge webcam.

Jeg ved INTET om perl!

Venligst
  Kasper
Avatar billede erikjacobsen Ekspert
16. april 2000 - 19:41 #1
Ole gav op? Det er helt klart den rigtige måde at gøre det på. Og det kunne
være spændende lige at få prøvet om ikke jeg kan gøre det i Perl. Jeg
tror min datter falder tidligt i søvn i aften, så ....

Lige for at være helt sikker: det er HTTP-protokollen, og det er en file-upload,
hvor du har et passende script på serveren til at fange indholdet? Hvad gør
du på serveren?
Avatar billede erikjacobsen Ekspert
17. april 2000 - 01:19 #2
Jeg har det - næsten, næsten, næsten. Dette pokkers Perl-program har underholdt
mig det meste af aftenen. Ja, underholdt. Det er virkelig helt utrolig, så nemt det er
at lave HTTP-forbindelser med Perl. Det må jeg til at gøre lidt mere!

Programmet læser en bestemt .gif fil ind i en multipart MIME-encoded POST. Den
sendes afsted til serveren, men et eller andet går galt. Jeg har efterlignet til punkt
og prikke en tilsvarende HTTP-request sendt fra en rigtig browser til en dummy-server.
Det virker bare ikke. Nu smider jeg koden her, og hvis nogen kan hjælpe med at få
det til at virke, kan vi nok finde ud af et eller andet med points!

use LWP::UserAgent;
$url = new URI::URL("http://www.hasselager.net/engberg/upload.php");
$hdrs = new HTTP::Headers(Accept => 'text/plain, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*',
      MIME_version => '1.0',
      content_type => 'multipart/form-data; boundary=PPPP',
      user_agent => 'Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)',
      host => 'localhost',
      accept_language => 'da',
      Connection => 'Keep-Alive',
      Accept_Encoding => 'gzip, deflate');

$content = "";
$content .= "--PPPP\n";
$content .= "MIME-Version: 1.0\n";
$content .= "Content-Disposition: form-data; name=\"vbillede\"; filename=\"c:\\dummy.gif\"\n";
$content .= "Content-Type: image/gif\n\n";
open(F,"C:/windows/profiles/erik/skrivebord/Image33.gif") || die("Could not open file");
binmode(F); # hvis vi er i DOS/Windows
while (read F,$buffer,16384) {
  $content .= $buffer;
}
close(F);
$content .= "\n--PPPP--";

$req = new HTTP::Request(POST,$url,$hdrs,$content);
$req->protocol('HTTP/1.1');
$ua = new LWP::UserAgent;
$resp = $ua->request($req);
if ($resp->is_success) {
  print $resp->content;
} else {
  print $resp->message;
}
Avatar billede engberg Juniormester
17. april 2000 - 08:55 #3
Jeg kan desværre ikke se om det ligner noget godt, men tak fordi du prøver!!!
Avatar billede erikjacobsen Ekspert
17. april 2000 - 08:57 #4
Fint nok - men hvad kan du på serversiden?
Avatar billede engberg Juniormester
17. april 2000 - 09:02 #5
Hvad mener du?
- hvad jeg ved, eller hvad jeg kan med mit hotel?
Avatar billede erikjacobsen Ekspert
17. april 2000 - 09:06 #6
Ja, altså hvad gør du (eller kan gøre) på serversiden for at snuppe
den uploadede fil og gemme den?
Avatar billede engberg Juniormester
17. april 2000 - 09:20 #7
Jeg ved det ikke, da det er til et gratis webhotel og det jeg har i forvejen kan kun anvende ASP, så jeg skal finde et nyt, hvor Perl er tilladt!
Avatar billede hatecaps Nybegynder
20. april 2000 - 23:10 #8
#!/usr/bin/perl
use CGI;
$req = new CGI;
$file = $req->param("filename");
@folders = split(/\\/,$file);
$actfile = pop(@folders);
($name,$ext) = split(/\./,$actfile);
if ($ext eq "gif" || $ext eq "jpg") {
  open(outfile,">../pics/$actfile");
  while (read($file, $buffer, 1024)) {
      print outfile $buffer;
      }
  close(outfile);
}

virker helt fint, forudsat at du har CGI modulet installeret   
Avatar billede hatecaps Nybegynder
20. april 2000 - 23:12 #9
det ovennævnte henter filen fra en form der er sat op med
<form action="dit script" method="post" enctype="multipart/form-data">

med et felt som <input type="file" name="file">
Avatar billede hatecaps Nybegynder
20. april 2000 - 23:12 #10
hovsa, det er selvfølgelig <input type="file" name="filename">
Avatar billede erikjacobsen Ekspert
21. april 2000 - 00:31 #11
Fint nok, men det er ikke det han vil have. Han vil have et
program, der kan køre på hans maskine, og uplode billeder.
Det du skriver er så det der skal være i "den anden ende".

Men engberg, bare fordi programmet på din maskine er i Perl
kan du sagtens bruge ASP på serveren.

Problemet i mit script er tilsyneladende at jeg tror jeg sender
med HTTP 1.1 protokollen, men det der bliver modtaget er
i HTTP 1.0. Hvorfor det?
Avatar billede y2k Nybegynder
05. juli 2000 - 22:14 #12
hej,
hvis du skal hente noget fra en FTP-server, så skal du ud i noget rigtigt hardcore troldkunsteri. det kan godt lade sig gøre i perl, men det kræver, at du:

forbinder til FTP-serveren(åben sokkel, bind til en port, connect osv.),
sender en "port ip-adresse,sokkel(i binært shift)",
sender en "send filnavn" kommando,
åbner den givne sokkel og lytter, hvorefter du sender filen med send() kommandoen...det er ret svært at lave. jeg vil nok foretrække erik's første udkast, selvom det godt kan laves lidt enklere. jeg skal prøve at komme med et eksempel en af dagene..
Avatar billede engberg Juniormester
05. juli 2000 - 22:27 #13
Det lyder bare for lækkert!!  :)
Avatar billede erikjacobsen Ekspert
05. juli 2000 - 22:33 #14
Hej, engberg. y2k har selvfølgelig ret, men det er nu ikke så besværligt.
Bare kig i en rimelig Perl-bog. Mit eksperiment med LWP-modulet
virkede ikke, så jeg er nemlig lidt opsat på at gøre det direkte med
sockets, etc... Lad os se hvem der kommer først y2k....
Avatar billede engberg Juniormester
05. juli 2000 - 22:40 #15
Tihi.... det her kan jeg lide ;)
Avatar billede y2k Nybegynder
05. juli 2000 - 22:51 #16
jamen jeg er så doven, at jeg ikke gider ræse om kap ;)

en hurtig connect kan laves således:
use IO::Socket;
IO::Socket::INET->new(
    Proto    => "tcp",
    PeerAddr => "$URL",
    PeerPort => "80",
)->send('data der skal sendes', INET);

jeg aner ikke om den virker med det filehandle, det er blot et eksempel
Avatar billede y2k Nybegynder
05. juli 2000 - 22:53 #17
og så en ting til, hvis du har shell-adgang, så kan du lave et program, der laver en sokkel, binder den til en port, og lytter til den, ligesom en webserver. så kan du nemlig gå uden om alt det der browser-møg som man nårmalt skal sende med når man laver et request. og så kan du også lave en udp forbindelse istedet
Avatar billede funnysite_dk Nybegynder
08. juli 2000 - 21:15 #18
Du skal ikke bruge perl til dette formål. Der findes er godt program der kan uploade billeder fra dit webcam f.eks. hver 10. sek.
Programmet hedder webcam32 og kan downloades på : http://www.surveyor.com/eval.html.

Hvis du mangler vejledning så send til min mail : cs@funnysite.dk eller gå indunder webcam32 hjælp : http://www.surveyor.com/webcam32help/
Avatar billede erikjacobsen Ekspert
08. juli 2000 - 21:40 #19
engberg kan - så vidt jeg forstår - ikke bruge et sådant program, hvis det anvender
ftp. Det skal være en simuleret form med <input type="file"..>
Ved du om det der program kan det ??
Avatar billede y2k Nybegynder
08. juli 2000 - 22:10 #20
engberg,
har du nogen form for shell-adgang til servere? dvs. telnet, ssh osv..
Avatar billede funnysite_dk Nybegynder
08. juli 2000 - 22:30 #21
Hvis du ikke kan bruge ftp, så kan du bare oprette en bruger på f.eks. www.subnet.dk de har ftp og så kan du bare uploade dertil. Så kan du vise billedet liggende på subnet's server.
Avatar billede engberg Juniormester
09. juli 2000 - 10:19 #22
Problemet er at jeg IKKE kan bruge FTP HERFRA. Jeg skal igennem en proxyserver for at komme over internettet og den understøtter ikke FTP eller TELNET!
Avatar billede y2k Nybegynder
09. juli 2000 - 18:23 #23
hej engberg,
jeg har faktisk allerede lavet både en klient og et server-program, som du kan bruge. jeg er lige ved at teste det, og lægger en link til det her når den er færdigtestet
Avatar billede erikjacobsen Ekspert
09. juli 2000 - 19:07 #24
engberg: kan du køre server-scripts på din server? Eller skal det være ren HTML?
y2k: hvis du bruger en "sjov" port, kan engbergs firewall jo stadig være et problem ...
Avatar billede y2k Nybegynder
09. juli 2000 - 20:20 #25
erik,
jeg bruger skam port 80 på serverens side, så det skulle ikke være noget problem ;)
Avatar billede erikjacobsen Ekspert
09. juli 2000 - 21:51 #26
Det er et problem, hvis der samtidig kører en webserver....
Avatar billede funnysite_dk Nybegynder
09. juli 2000 - 22:09 #27
Brug webcam den virker også med port 80 og viser billederne så hurtigt modemet kan trække. Hvis man har en hurtig forbindelse er det næsten som at se en film.
Avatar billede y2k Nybegynder
09. juli 2000 - 22:11 #28
erik, jeg bruger netop webserveren på port din nød*G* der skal lægge et script på serveren, som så gemmer billedet.
Avatar billede erikjacobsen Ekspert
09. juli 2000 - 22:28 #29
ok - du mener et server-program i PHP/ASP/Perl - det vi andre nødder kalder et script ... ?
Avatar billede y2k Nybegynder
09. juli 2000 - 22:28 #30
funnysite, jeg tror du misforstår noget. han kan ikke benytte FTP, så han kan ikke bruge et eller andet hi-tech webcam program til det. desuden er port 80 webserverens foretrukne port, så den kan man ikke bruge, medmindre at man har en skummel webserver..
Avatar billede y2k Nybegynder
09. juli 2000 - 22:31 #31
port 80 skulle der vist også lige stå på den der linie*G*
Avatar billede engberg Juniormester
10. juli 2000 - 09:39 #32
Jeg følger Jer meget tæt og jeg glæder mig til at se hvad du kommer frem til y2k...
Avatar billede engberg Juniormester
22. juli 2000 - 13:27 #33
Øv!

Kan I ikke få det til at køre?
Avatar billede engberg Juniormester
07. august 2000 - 12:37 #34
Da det ikke er kommet til at virke og da erikjacobsen ikke har svarret, så smider jeg lige 50 point til dig y2k. Der er 300 point til den der får det til at virke!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester