Предлагаю складывать сюда описание и ссылки на интересные сайты о программировании в java.
_____
http://waper.ru/forum/56 - форум о java программировании, много всего...
http://waper.ru/forum/26 - форум с java играми.
_____
Специально для подобных сайтов написал delphi-программку автоматизированной загрузки в командной строке с возможностью работы через proxy-server.
Это позволяет создавать bat-файлы для закачки всевозможных страниц из диапазонов, например
www.site.ru/page1.thm
www.site.ru/page2.thm
www.site.ru/page3.thm
и т.д.
Существующие программки например "TeleportPro" имеют несколько другую специфику..
_____
исходный код GETHTTP:
{$APPTYPE CONSOLE} { $R ICO.RES}
{Загрузка html-страниц через proxy из коммандной строки}
uses Windows, WinSock;
var
proxyhost,host,page,s : string;
proxyport,i,len : integer;
function loadToFile(const proxyhost : string; proxyport : integer; const host, page, filename : string) : integer;
//сохранить сетевой ресурс на жесткий диск
//если работа не через proxy, то "proxyhost" должен быть равен "host", а "proxyport" - порту сервера, т.е. для http - "80"
var
sock : TSocket;
wData : WSADATA;
addr : sockaddr_in;
phe : PHostEnt;
inAddr : u_long;
buf : array [0..10240-1] of char;
count,n : integer;
s : string;
f : file;
begin
result := 0;
//Инициализация сокета
WSAStartup($0101, wData);
// Определяем, что ввел пользователь имя хоста или его адрес
inAddr := inet_addr(pchar(proxyhost));
if inAddr = INADDR_NONE then
begin
phe := gethostbyname(pchar(proxyhost));
if not Assigned(phe) then
begin
WSACleanup;
Exit;
end;
inAddr := PInAddr(phe.h_addr_list^)^.s_addr;
end;
sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if sock = INVALID_SOCKET then
begin
WSACleanup;
Exit;
end;
addr.sin_family := AF_INET;
addr.sin_port := htons(proxyport{80});
addr.sin_addr.s_addr := InAddr;
n := connect(sock, addr, sizeof(addr));
if n = SOCKET_ERROR then
begin
closesocket(sock);
WSACleanup;
Exit;
end;
// Составляем строку запроса и отправляем
s := 'GET http://'+host+'/'+page+' HTTP/1.0'#13#10+
'Host: '+host+#13#10+
'Accept: *.*, */*'#13#10#13#10;
send(sock, s[1], length(s), 0);
// принимаем ответ
assignFile(f, filename);
rewrite(f, 1);
count := recv(sock, buf, sizeof(buf), 0);
//n:=0; while not((buf[n]=#13) and (buf[n+1]=#10) and (buf[n+2]=#13) and (buf[n+3]=#10)) do inc(n);
n := pos(#13#10#13#10, buf)+3;
dec(count,n);
move(buf[n], buf[0], count); // отрезаем HTTP заголовки
repeat
blockWrite(f, buf, count, n);
result := result+n;
count := recv(sock, buf, sizeof(buf), 0);
until count = 0;
close(f);
// Закрываем сокет – завершаем работу с сетью
closesocket(sock);
WSACleanup;
end;
begin
if paramCount=4 then
begin
proxyhost:=paramStr(1);
val(paramStr(2),proxyport,i);
s:=paramStr(3);
len:=length(s);
host:='';
i:=8;
while (i<=len) and (s[i]<>'/') do begin host:=host+s[i]; inc(i); end;
page:='';
inc(i);
while (i<=len) do begin page:=page+s[i]; inc(i); end;
s:=paramStr(4);
writeln(proxyhost,':',proxyport,' # '+host+'/'+page+' ==> '+s+' [',
loadToFile(proxyhost,proxyport,host,page,s), ' bytes]');
//loadToFile('169.254.159.223', 8080, 'http://www.ya.ru/', '1.htm')
end
else writeln('http-page loader. v0.1 by arT(c). e-mail: [email protected]'#13#10+
'usage: gethttp proxyhost proxyport url filename'#13#10+
'examples: gethttp www.google.ru 80 http://www.google.ru/page1/ no_proxy.htm'#13#10+
'examples: gethttp myproxy 808 http://www.ya.ru/ proxy_host.htm'#13#10+
'examples: gethttp 169.254.159.223 8080 http://www.mail.ru/auth/ proxy_ip.htm'#13#10);
end.
пример bat-файла:
@echo off
for /l %%i in (2,1,785) do gethttp 169.254.159.223 8080 http://waper.ru/forum/56?page=%%i %%i.htm
в архиве компилированная версия