Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2011, 13:51   #1
GaMeSTeR
 
Регистрация: 03.12.2010
Сообщений: 5
Печаль THTTPSend SynApse остановка загрузки

Есть модуль THTTPSend в библиотеке SynApse как остановить загрузку страницы?
Загружаю страницу так

if http.HTTPMethod('GET','http://www.google.ru') then begin
******
Кто нибудь может помочь?
GaMeSTeR вне форума Ответить с цитированием
Старый 19.04.2011, 10:45   #2
Mifody
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 215
По умолчанию

хм, вообще мне видится два метода
1. вынести загрузку в отдельный поток, и кнопкой рубить его
2. переписать (точнее подправить) модуль компонента. Помниться мне, там получение данных в цикле идет, можно попробовать реализовать остановку загрузки
Помог с вопросом - тыркаем в весы, Вам не сложно, а мне приятно
Mifody вне форума Ответить с цитированием
Старый 19.04.2011, 13:27   #3
GaMeSTeR
 
Регистрация: 03.12.2010
Сообщений: 5
По умолчанию

1. У меня и так все в отдельных потоках надо чтоб они работали
2. Можно по подробней за ранее спс
GaMeSTeR вне форума Ответить с цитированием
Старый 05.12.2011, 10:55   #4
leonidus
Новичок
Джуниор
 
Регистрация: 05.12.2011
Сообщений: 4
По умолчанию

Тоже интересен этот вопрос, как остановить загрузку большого документа?
leonidus вне форума Ответить с цитированием
Старый 05.05.2013, 15:46   #5
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

UPD
Весьма интересен вопрос. Аналогичная проблема - в потоке идёт скачка файла, пробую сначала
Код:
HTTP.Abort
но выдаёт AV. А не разорвав соединение, убить поток безопасно невозможно(нужно, чтобы сам завершился).

Что скажете, форумчани?

_____
Важно: я так делаю при закрывании формы, наверное, сокет наверное не успевает сам закрыться "плавно".
Тогда дополнительный вопрос: как при закрывании проверить, закрыт ли сокет или нет, например, в цыкле проверку крутить(чтобы не дать закрыться окне программы)?

Последний раз редактировалось Delphi_ProGer; 05.05.2013 в 16:01. Причина: Добавил некоторые детали
Delphi_ProGer вне форума Ответить с цитированием
Старый 05.05.2013, 16:35   #6
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Цитата:
Сообщение от Mifody Посмотреть сообщение
2. переписать (точнее подправить) модуль компонента. Помниться мне, там получение данных в цикле идет, можно попробовать реализовать остановку загрузки
Не обязательно подправлять, достаточно внимательно изучить модуль =)

Цитата:
Сообщение от GaMeSTeR Посмотреть сообщение
Кто нибудь может помочь?
Как два пальца об ...

Самое главное, это присвоение обработчика событий загрузки и глобальная переменная для остановки загрузки.

Код:
unit uDownloadThread;

interface

uses
  Windows, Classes, SysUtils, httpsend, blcksock;

type
  TDownloadThread = class(TThread)
  public

  private
    FHTTP: THTTPSend;
    procedure OnStatus(Sender: TObject; Reason: THookSocketReason; const Value: string);
  protected
    procedure Execute; override;
  end;

var
  FDownloadStop: Boolean;  // глобальная переменная для остановки загрузки

implementation

//функция очищения заголовка и тела THTTPSend
procedure ClearHTTPMethod(HTTP: THTTPSend);
begin
  HTTP.Document.Clear;
  HTTP.Headers.Clear;
  //указываем протокол
  HTTP.Protocol := '1.1';
  //указываем UserAgent'a (маскируемся под Firefox)
  HTTP.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0';
end;

{ TDownloadThread }

procedure TDownloadThread.OnStatus(Sender: TObject; Reason: THookSocketReason;
  const Value: string);
begin
  // если глобальная переменная равна FDownloadStop равна True,
  // то останавливаем загрузку
  case FDownloadStop of
    True: FHTTP.Abort;
  end;
end;

procedure TDownloadThread.Execute;
begin
  FreeOnTerminate := True;
  // присваиваем значение переменной
  FDownloadStop := False;
  // создание класса
  FHTTP := THTTPSend.Create;
  try
    // очищаем класс THTTPSend
    ClearHTTPMethod(FHTTP);
    // самое главное - присваиваем обработчик событий загрузки документа
    FHTTP.Sock.OnStatus := OnStatus;
    // отправляем запрос
    if FHTTP.HTTPMethod('GET', 'http://www.google.ru') then
    begin
      // сохранение документа
      FHTTP.Document.SaveToFile('index.html');
    end;
  finally
    // очищаем класс
    FreeAndNil(FHTTP);
  end;
end;

end.
Lardes вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отправка файла synapse Slimshaddy Работа с сетью в Delphi 3 30.07.2013 01:27
Функция загрузки картинки delphi (synapse) Bright-rider Фриланс 11 22.01.2011 13:52
Вопрос про synapse Bright-rider Работа с сетью в Delphi 3 14.01.2011 19:46
Кривой synapse? chikaga Работа с сетью в Delphi 2 15.12.2010 12:03
Synapse FanRa3 Общие вопросы Delphi 1 09.12.2010 21:06