Форум: "Сети";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
ВнизПомогите разобратся со скачкой файлов через прокси(TclientSocket) Найти похожие ветки
← →
BANick (2005-12-14 11:13) [0]Здравствуйте!
мне нужно скачать с определенного урла сначала хтмл текст, понов проаналлизировав его скачать нужные картинки. пробовал через InternetOpenURL но картинки после этого уже были недоступны(для картинок урл генерится случайным образом и при втором InternetOpenURL на нужную картинку, картинка уже заблокирована) т.е. нужно созранять коннект с сервером как это делает браузер - мне посоветовали сокеты, но после SendText выдается ошибка 10060(т.е. ответа не получено) я подозреваю что это из за того что у меня соединение через проксю - подскажите какую нужно передавать строчку
procedure TForm1.SocketWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendText(Chtml);
end;
procedure TForm1.SocketRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
FText := FText + Socket.ReceiveText
end;
procedure TForm1.SocketConnecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
FText := "";
end;
procedure TForm1.SocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Caption:=":)";
end;
procedure TForm1.SocketDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
s,a,t:string;
begin
тут должен анализироватся текст и запускатся новый сокет для скачивания картинки
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CS.Open;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CS:=TClientSocket.Create(form1);
CS.Port:=80;
CS.Host:="www.ag.ru";
CS.OnConnecting:=SocketConnecting;
CS.OnDisconnect:=SocketDisconnect;
CS.OnRead:=SocketRead;
CS.OnConnecting:=SocketWrite;
CS.OnConnect:=SocketConnect;
Ghtml:="";
Ghtml:=Ghtml+"GET "+Webpage+" HTTP/1.1"#10#10;
Ghtml:=Ghtml+"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*"#10#10;
Ghtml:=Ghtml+"Accept-Language: ru"#10#10;
Ghtml:=Ghtml+"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"#10#10;
Ghtml:=Ghtml+"Host: "+CS.Host+#10#10;
Ghtml:=Ghtml+"Connection: Keep-Alive"#10#10;
Gimg:="";
Gimg:=Gimg+"GET "+Webpage+" HTTP/1.1"#10#10;
Gimg:=Gimg+"Accept: */*"#10#10;
Gimg:=Gimg+"Referer: http://www.ag.ru"#10#10;
Gimg:=Gimg+"Accept-Language: ru"#10#10;
Gimg:=Gimg+"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"#10#10;
Gimg:=Gimg+"Host: "+CS.Host+#10#10;
Gimg:=Gimg+"Connection: Keep-Alive"#10#10;
Gimg:=Gimg+"Content-Type: image/jpeg"#10#10;
Chtml:=Ghtml;
end;
← →
isasa © (2005-12-14 12:22) [1]Смешались в кучу, кони, люди .....
http (proxy) - IP (socket) - две большие разницы.
Попробуй простоInternetOpen -> InternetConnect -> HttpOpenRequest -> HttpSendRequest -> HttpQueryInfo -> InternetQueryDataAvailable -> InternetReadFile -> InternetCloseHandle
Сервер, возможно, использует куки (или SessionID, если это IIS+.NET) для идентификации сеанса.
← →
BANick (2005-12-14 15:16) [2]спасибо!
я действительно решил проблему через InternetOpen и картинки доступны если в InternetOpenUrl поставить флаг INTERNET_FLAG_KEEP_CONNECTION
но столкнулся с тем что невозможно использовать InternetSetFilePointer, причем функция возвращает правильное значение
InternetReadFile(hURL, @Buffer,
50, BufferLen);
InternetSetFilePointer(hURL,-10,nil,FILE_CURRENT,0);
она возвращает 40
InternetReadFile(hURL, @Buffer,
50, BufferLen);
InternetSetFilePointer(hURL,1000,nil,FILE_BEGIN,0);
возвращает 1000
но любые вызовы после этого
InternetReadFile не приводят к считыванию(BufferLen=0)
вопрос у меня такой - можно ли какнить это победить или это зависит исключительно от сервера к которому коннекчусь и нужно смирится и читать подряд с первого байта?
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c