Sam o to pytałem na jednym forum czy w można jakoś pobierać z rapidshare premium nie uzywając
INDY i innych komponentów, które muszą zapisywać do strumieni, zamiast po kawałku do pliku, bo
jak zaposujemy do strumieni to na dysku tworzony jest od razu wielki plik zmiast "po kawałku". Sam
na podstawie kodu HttpGet napisałem funkcję korzystającą z modułu WinInet, która pobiera pliki ze
strony chronionej loginem oraz haslem, ale działa na zwykłmy serwerze www z .htaccess - a niestety
na rapidshare.com już nie, pewnie ze względu na przekierowania. Próbowałem pobierać nagłowki, ale
w nich nie ma wcale zawrtego linku do pliku albo robie to źle. A na innym forum gdzie pytałem o to
jak ściągnąć z rapidshare przy użyciu procedur z WinInet jeden użytkownik odpisał że podeśle mi na
priva metodę do pobierania opartą na komponentach Synapse, ale póki co nie napisał nic więcej, bo
nie ma za wiele wolnego czasu. Na googlach też nie znalazłem sposobu w Delphi na obsłużenie kodu
302 czyli przekierowania. Poniżej masz funkcję jaką wykombinowałem, ale z rapidshare nie chce, jak
wspomniałem - działać w ogóle, pobiera tylko plik html. Jakby ktoś miał jakieś rozwiązanie to proszę
napiszcie w tym wątku. Przyłączam się do pytania użytkownika Legalnl, chodzi o moduł WinInet albo
inną metodę obsługującą przekierowanie na rapidshare.com, pozwalająca na zapis do pliku typu File.
procedure Download(URL: string; UserName, Password, FileName: string);
var
Buffer : array[1..1024] of Byte;
hSession, hConnect, hRequest : HINTERNET;
dwRead : DWORD;
F : File;
pBuf : Pointer;
dwBufLen : DWORD;
dwIndex : DWORD;
I : Integer;
HostName, FileUrl, AcceptType : string;
begin
if Pos('http://', LowerCase(URL)) <> 0 then
Delete(URL, 1, 7);
I := Pos('/', URL);
HostName := Copy(URL, 1, i-1);
FileUrl := Copy(URL, i, Length(URL) - i + 1);
hSession := InternetOpen('Fast Download',
INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
Application.ProcessMessages;
try
hConnect := InternetConnect(hSession, PChar(HostName),
INTERNET_DEFAULT_HTTP_PORT, PChar(UserName), PChar(Password), INTERNET_SERVICE_HTTP, 0, 0);
AcceptType := PChar('');
hRequest := HttpOpenRequest(hConnect, 'GET', PChar(FileUrl), 'HTTP/1.0',
PChar(HostName), @AcceptType, 0, 0);
HttpSendRequest(hRequest, nil, 0, nil, 0);
Application.ProcessMessages;
dwBufLen := 1024;
dwIndex := 0;
GetMem(pBuf, dwBufLen);
HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LENGTH,
pBuf, dwBufLen, dwIndex);
FreeMem(pBuf, dwBufLen);
try
AssignFile(F, FileName);
try
Rewrite(F, 1);
repeat
if Form1.Przerwij then Break;
InternetReadFile(hRequest, @Buffer, SizeOf(Buffer), dwRead);
BlockWrite(F, Buffer, dwRead);
Application.ProcessMessages;
until dwRead = 0;
finally
CloseFile(F);
end;
finally
InternetCloseHandle(hSession);
end;
finally
InternetCloseHandle(hConnect);
InternetCloseHandle(hRequest);
end;
end;
Napisałem do autora USDownloadera, może będzie w stanie pomóc jakimś źródłem, póki co czekam.
EDIT: dostałem od autora USDownloadera przykład do pobierania z rapidshare przy użyciu Synapse, a
także źródło plugniu do pobierania z rapidshare (z konta premium). Te pierwsze może się na coś Tobie
przyda, to drugie raczej jako źródło wiedzy, bo brakuje innyhc unitów ze źródła do skompilowania go.
http://rapidshare.com/files/174295411/demo.zip