Hello,
I am new at the community and newbie at programming :)
As you may know rapidshare provides a perl script for linux, to upload files at their servers.
You can find the original scripts at rapidshare news :
If you test it you will see that you can upload one file at time.
I try to modify it in that way that script can read a text file with the names of the files i want to upload.
But the script works only if there one name file at the text.
If i try with two files (lets say File Finder_48x48.pn g and Dashboard_128x1 28.png) i take this result:
When the text file contains only one name file it works :confused:
The script as i modified is this :
I will be happy if anyone can help.
Thanks in advance :)
I am new at the community and newbie at programming :)
As you may know rapidshare provides a perl script for linux, to upload files at their servers.
You can find the original scripts at rapidshare news :
Code:
http://images.rapidshare.com/software/rsapi.pl
If you test it you will see that you can upload one file at time.
I try to modify it in that way that script can read a text file with the names of the files i want to upload.
But the script works only if there one name file at the text.
If i try with two files (lets say File Finder_48x48.pn g and Dashboard_128x1 28.png) i take this result:
Code:
thanos@localhost ~/rapid2 $ perl rsapiteliko.pl Unsuccessful stat on filename containing newline at rsapiteliko.pl line 52. File Finder_48x48.png Dashboard_128x128.png is empty or does not exist!
The script as i modified is this :
Code:
#!/usr/bin/perl # RapidShare AG OpenSource Perl Uploader V1.0. For non-commercial use only. All rights reserved. # Included: Uploading to free, collector's and premium-zone. The MD5-check after uploads checks if the upload worked. # NOT included in this version: Upload-resume via new RS API. # This is a PERL script written for experts and for coders wanting to know how to write own upload programs. # Tested under Linux and Linux only. # If you write your own upload-tools, please look at our rsapi.cgi calls. You need them to have fun. # # To upload a file, put this script on a machine with perl installed and use the following syntax: # perl rsapi.pl free mytestfile.rar (this uploads mytestfile.rar as a free user) # perl rsapi.pl prem archive.rar 334 test (this uploads archive.rar to the premium-zone of login 334 with password test) # perl rsapi.pl col a.rar testuser mypw (this uploads a.rar to the collector's-zone of login testuser with password mypw) # # We will publish another version with upload resume enabled soon, but this script actually works and we actually # want you to understand how it works and upload resume would make this script even more complex. #Edited by 8anos #Find the original script here: http://images.rapidshare.com/software/rsapi.pl use strict; use warnings; use Digest::MD5("md5_hex"); use Fcntl; use IO::Socket; my ($x, $text, $file, $filename, $uploadpath, $size, $socket, $uploadserver, $cursize, $fh, $bufferlen, $buffer, $boundary, $header, $contentheader, $contenttail, $contentlength, $result, $maxbufsize, $md5hex, $filecontent, $size2, %key_val, $login, $password, $zone); # This chapter sets some vars and parses some vars. $/ = undef; $text ="up.txt"; #This is text with the files which you want to upload open (INFO, "$text") || die("Could not open file!"); my @plirof=<INFO>; close (INFO); foreach $x (@plirof) { $file = $x || die "Syntax: $0 <filename to upload> <free|prem|col> [login] [password]\n"; $zone = 'prem'; #If you use Free Rapidshare change "prem" to free $login = 'username'; # Your username, if your previous choise is free you havent to change it $password = 'password'; #Your password σας, if your previous choise is free you havent to change it $maxbufsize = 64000; $uploadpath = "l3"; $cursize = 0; $size = -s $file || die "File $file is empty or does not exist!\n"; $filename = $file =~ /[\/\\]([^\/\\]+)$/ ? $1 : $file;} #This chapter checks the file and calculates the MD5HEX of the existing local file. print "File $file has $size bytes. Calculating MD5HEX...\n"; open(FH, $file) || die "Unable to open file: $!\n"; $filecontent = <FH>; close(FH); $md5hex = uc(md5_hex($filecontent)); $size2 = length($filecontent); print "MD5HEX is $md5hex ($size2 bytes analyzed.)\n"; unless ($size == $size2) { die "Strange error: $size bytes found, but only $size2 bytes analyzed?\n" } # This chapter finds out which upload server is free for uploading our file by fetching (URL address blocked: See forum rules)/cgi-bin/rsapi.cgi?sub=nextuploadserver_v1 if ($login and $password) { print "Trying to upload to your premium account.\n" } else { print "Uploading as a free user.\n" } print "Uploading as filename '$filename'. Getting upload server infos.\n"; $socket = IO::Socket::INET->new(PeerAddr => "rapidshare.com:80") || die "Unable to open port: $!\n"; print $socket qq|GET /cgi-bin/rsapi.cgi?sub=nextuploadserver_v1 HTTP/1.0\r\n\r\n|; ($uploadserver) = <$socket> =~ /\r\n\r\n(\d+)/; unless ($uploadserver) { die "Uploadserver invalid? Internal error!\n" } print "Uploading to ul$uploadserver$uploadpath.rapidshare.com\n"; # This chapter opens our file and the TCP socket to the upload server. foreach $x (@plirof) { $file = $x; sysopen($fh, $file, O_RDONLY) || die "Unable to open file: $!\n"; $socket = IO::Socket::INET->new(PeerAddr => "ul$uploadserver$uploadpath.rapidshare.com:80") || die "Unable to open port: $!\n";} # This chapter constructs a (somewhat RFC valid) HTTP header. See how we pass rsapi_v1=1 to the server to get a program-friendly output. $boundary = "---------------------632865735RS4EVER5675865"; $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="rsapi_v1"\r\n\r\n1\r\n|; if ($zone eq "prem" and $login and $password) { $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="login"\r\n\r\n$login\r\n|; $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="password"\r\n\r\n$password\r\n|; } if ($zone eq "col" and $login and $password) { $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="freeaccountid"\r\n\r\n$login\r\n|; $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="password"\r\n\r\n$password\r\n|; } $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="filecontent"; filename="$filename"\r\n\r\n|; $contenttail = "\r\n$boundary--\r\n"; $contentlength = length($contentheader) + $size + length($contenttail); $header = qq|POST /cgi-bin/upload.cgi HTTP/1.0\r\nContent-Type: multipart/form-data; boundary=$boundary\r\nContent-Length: $contentlength\r\n\r\n|; #This chapter actually sends all the data, header first, to the upload server. print $socket "$header$contentheader"; while ($cursize < $size) { $bufferlen = sysread($fh, $buffer, $maxbufsize, 0) || 0; unless ($bufferlen) { die "Error while sending data: $!\n" } print "$cursize of $size bytes sent.\n"; $cursize += $bufferlen; print $socket $buffer; } print $socket $contenttail; # OK, all is sent. Now lets fetch the server's reponse and analyze it. print "All $size bytes sent to server. Fetching result:\n"; ($result) = <$socket> =~ /\r\n\r\n(.+)/s; unless ($result) { die "Ooops! Did not receive any valid server results?\n" } print "$result >>> Verifying MD5...\n"; foreach (split(/\n/, $result)) { if ($_ =~ /([^=]+)=(.+)/) { $key_val{$1} = $2 } } # Now lets check if the result contains (and it should contain) the MD5HEX of the uploaded file and check if its identical to our MD5HEX. unless ($key_val{"File1.4"}) { die "Ooops! Result did not contain MD5? Maybe you entered invalid login data.\n" } if ($md5hex ne $key_val{"File1.4"}) { die qq|Upload FAILED! Your MD5HEX is $md5hex, while the uploaded file has MD5HEX $key_val{"File1.4"}!\n| } print "MD5HEX value correct. Upload completed without errors. Saving links to rsulres.txt\n\n\n"; # Maybe you want the links saved to a logfile? Here we go. open(O, ">>rsulres.txt"); print O $result . "\n"; close(O); # Thats it. Have fun experimenting with this script. Now lets say... exit;
I will be happy if anyone can help.
Thanks in advance :)
Comment