Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

Помогите разобратся со скачкой файлов через прокси(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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.058 c
15-1141543203
Alex Konshin
2006-03-05 10:20
2006.03.26
9/11


3-1138786102
Bless
2006-02-01 12:28
2006.03.26
Decimal Separator и MS SQL


15-1141227189
Ariman
2006-03-01 18:33
2006.03.26
Трудоустройство иностранцев в России


1-1140553891
Виктор8
2006-02-21 23:31
2006.03.26
Как заблокировать запуск 2х копий программы?


2-1141169056
spogi
2006-03-01 02:24
2006.03.26
Kak v QReport pokazat dannie iz raznix tablic, ili summirovat ix