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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2011, 00:36   #1
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию Отправка post-запроса - неправильное получение кода

Здравствуйте, отправляю запрос на сайт autopriwos.by (в структуре PageInfo, передаваемой в параметре, находятся только идентификаторы запчасти и марки авто):

Код:
function GetAPPage(PageInfo: TPageInfo): string;
var
 i: integer;
 ht: TIdHttp;
 Params: TStrings;
 sp: string;
 ss: TStringStream;
begin
 ht := TIdHTTP.Create(nil);
 Params := TStringList.Create;
 try
  With Params do
  begin
   Add('ap_parts_filter[part_type]=' + PageInfo.RNameID);
   Add('ap_parts_filter[auto_brand]=' + PageInfo.RBrandID);
   Add('ap_parts_filter[auto_model]=');
   Add('ap_parts_filter[_adv_search]=0');
   Add('ap_parts_filter[year]=');
   Add('ap_parts_filter[engine_capacity]=');
   Add('ap_parts_filter[engine_type]=');
   Add('ap_parts_filter[engine_detail]=');
   Add('ap_parts_filter[direction]=');
   Add('ap_parts_filter[side]=');
   Add('ap_parts_filter[auto_body]=');
   Add('ap_parts_filter[color_id]=');
   Add('ap_parts_filter[sort]=part_type_name');
   Add('ap_parts_filter[sort_dir]=0');
   Add('ap_parts_filter[submit]=Найти запчасти');
  end;

  ht.Request.ContentType := 'application/x-www-form-urlencoded';
  ht.Request.Referer := 'http://www.autopriwos.by/';
  ht.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1';
  ht.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';

  ht.Request.ContentLength := 561;
  ht.HandleRedirects := true;

  {for i := 0 to Params.Count - 1 do
  begin
   sp := sp + Params.Names[i] + '=' + Params.Values[Params.Names[i]];
   //sp := sp + EncodeString(Params.Names[i]) + '=' + EncodeString(Params.Values[Params.Names[i]]);
   if i <> Params.Count - 1 then sp := sp + '&';
  end; }

  //ss := TStringStream.Create(sp, CP_UTF8);
  //ss := TStringStream.Create(sp, 1251);
  Result := ht.Post('http://www.autopriwos.by/autoparts/db.html', Params);
 finally
  if ss <> nil then ss.Free;
  Params.Free;
  ht.Free;
 end;
end;
Но код, похоже, получается не полностью - заканчивается многоточием. Пробовал загружать с помощью XmlHttp - то же самое.
В чем может быть проблема?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 14.12.2011, 06:08   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

ht.Request.ContentLength := 561; -нинадо
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 14.12.2011, 07:00   #3
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Slym, хоть миллион выставь, хоть единицу, хоть убери вовсе - результат тот же.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 14.12.2011, 10:39   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

ТС, вам не обязательно составлять шапку запроса. Да и незачем если не знаете, что от чего там берётся.
Если Content-length меньше размера запроса, то сервер считает что пакет битый, и посылает вас лесом

Возьмите сниффер и изучите сайт.
Может дело в кукисах, может дело в том, что вам не нужно состовлять HTTP Header(Request), а может в чём-то ещё.

Посмотрите как браузер общается с сайтом, и просто имитируйте его действия в своей программе.
Человек_Борща вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение данных POST запроса (TWebBrowser) kardinal94 Работа с сетью в Delphi 3 29.08.2011 23:33
получение данных из Post запроса ToDayGoodDay Работа с сетью в Delphi 1 30.07.2011 20:15
Отправка запроса POST CreatiK Общие вопросы .NET 4 06.12.2010 21:15
Получение Post запроса bulldog5293 Работа с сетью в Delphi 5 22.11.2010 12:51
Отправка POST запроса S@fer Работа с сетью в Delphi 0 29.01.2009 13:33