Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 729
1

Поиск строки в ответе сервера

16.05.2016, 22:25. Показов 1363. Ответов 8

Author24 — интернет-сервис помощи студентам
Как правильно определить наличие строки в ответе сервера? Так я получаю ошибку:
Код
E2250 There is no overloaded version of 'Pos' that can be called with these arguments
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function foo(): Boolean;
var
  Res: Boolean;
  HTTP: THTTPSend;
begin
  Result := False;
 
  HTTP := THTTPSend.Create;
  HTTP.KeepAlive:=true;
  HTTP.KeepAliveTimeout:=300;
  HTTP.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0';
 
  try
    Res := HTTP.HTTPMethod('GET', 'http://site.ru');
    if (Res = True) and (Pos('text', HTTP.Document) <> 0) then
      Result := True;
  finally
    HTTP.Free;
  end;
end;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2016, 22:25
Ответы с готовыми решениями:

Непонятные символы в начале строки в ответе от сервера
Есть скрипт который выдает json-строку, но в самом начале ее есть невидимые в браузере символы, с...

Дата в ответе сервера
Всем привет! Есть html файл. Его содержимое - куча &lt;? include Файлы php, из которых...

Непонятные символы в ответе сервера
Не подскажете что это за кодировка, и как с этим бороться?

Как декодировать символы в ответе от сервера
Всем привет! Получаю ответ от сервера (название файла): Bam &amp;#code; Каким образом можно...

8
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
16.05.2016, 22:40 2
Перевожу (вольный перевод): Не найдено версии функции Pos, в которую можно передавать такой набор параметров.
Вывод: У вас или количество или тип параметров неправильный.

Теперь смотрим код... Не встречал THTTPSend, но первое что следует проверить: что THTTPSend.Document - строка.
Кстати может стоит опробовать AnsiPos или PosEx?
0
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 729
17.05.2016, 03:02  [ТС] 3
HTTP.Document возвращает тип TMemoryStream. Как его в string преобразовать (хотя string макс. 255 символов и поэтому обрежет) или может у него есть какой-либо свой метод для поиска?
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
17.05.2016, 07:16 4
Delphi
1
2
3
4
ss:TStringStream;
 
ss:=TStringStream.Create('');
ss.loadFromStream(memStream);
ss.DataString ---- строка, пользуйтесь
0
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 729
17.05.2016, 15:43  [ТС] 5
Нет, там тип TMemoryStream.
0
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
17.05.2016, 15:53 6
TStringStream загрузит из TMemoryStream. И в TStringStream.DataString будет строка.

Добавлено через 2 минуты
Хотя... Какая у вас версия Делфи?
0
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 729
17.05.2016, 16:01  [ТС] 7
Delphi 10 (2006)

Добавлено через 6 минут
ss.loadFromStream(memStream);
Код
E2003 Undeclared identifier: 'loadFromStream'
0
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
17.05.2016, 16:12 8
Лучший ответ Сообщение было отмечено artem78 как решение

Решение

Цитата Сообщение от artem78 Посмотреть сообщение
(хотя string макс. 255 символов и поэтому обрежет)
эм... Нет. Это про ShortString. А нормальные строки где-то около 2 ГБ ограничение, на что угодно хватит.

Как-то так попробуйте:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Function foo(): BooLean;
Var Res: Boolean; HTTP: THTTPSend; strStream: TStringStream;
Begin
Result:=False;
strStream:=TStringStream.Create('');
HTTP:=THTTPSend.Create();
Try
      HTTP.KeepAlive:=True;
      HTTP.KeepAliveTimeout:=300;
      HTTP.UserAgent:='Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0';
      Res:=HTTP.HTTPMethod('GET', 'http://site.ru');
      strStream.LoadFromStream(HTTP.Document);
      If (Res=True) And (AnsiPos('text', LowerCase(strStream.DataString))>0) Then
            Result:=True;
Finally
      HTTP.Free();
      strStream.Free();
      End;
End;
Добавлено через 1 минуту
ага... Видимо LoadFromStream в нём появилось позднее... Сейчас подумаем.

Добавлено через 4 минуты
Delphi
1
strStream.CopyFrom(HTTP.Document, HTTP.Document.Size); // strStream.LoadFromStream(HTTP.Document);
1
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 729
17.05.2016, 16:37  [ТС] 9
Большое спасибо. С strStream.CopyFrom работает как надо.
0
17.05.2016, 16:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2016, 16:37
Помогаю со студенческими работами здесь

Увеличение цифры в Label при ответе с сервера
1) Подскажите как сделать так что бы, когда приходит нужный ответ с сервера, в label цифра...

Вывести заголовок Location при ответе от сервера 302
Добрый день Возникла проблема. При обращении к серверу (метод POST) сервер отвечает 302 и в...

Ошибка StatusCode:500, при ответе от Web api сервера
В чем тут дело, в метод контроллера есть заход, ошибок никаких там нет, но при возращении данных...

Ссылка на объект не указывает на экземпляр объекта при ответе от сервера
У меня есть несколько классов, вложенные друг в друга. Происходит запрос на сервер и получаю ответ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru