Конференция "Сети" » получить html по IdHTTP с price.ru
 
  • Иван (17.03.11 09:47) [0]
    Здравствуйте. Пишу парсер сайта Price.ru, через idhttp посылаю запрос с партномером и получаю страницу с товарами.Тестовый код:

    IdHTTP1.Request.Clear;
    IdHttp1.HandleRedirects := true;
    with IdHTTP1.Request do
    begin
     Host := 'price.ru';
     Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
     AcceptLanguage := 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3';
     Connection := 'keep-alive';
     Referer := 'http://price.ru/offers?query='+Trim(edPartNumber.Text)+'&limit=100&auto=1'
    end;
    try
    html :=  UTF8Decode(IdHTTP1.get('http://price.ru/offers?query='+Trim(edPartNumber.Text)+'&limit=100&auto=1'));
         except on e : EIDHttpProtocolException do
         Begin
           if e.ErrorCode = 302 then
             begin
               try
                 // получаем новый адрес - адрес перенаправления
                 html:=IdHTTP1.Get(IdHTTP1.Response.Location);
               except on e:Exception do            
                 ShowMessage('Ошибка при получении нового адреса.'+e.Message);
               end;
             end
           else
             //http 404, 501 и так далее
             ShowMessage('Ошибка другого вида, не 302:'+e.Message);
         end;
       on e:exception do
       begin
         ShowMessage(e.Message);
       end;


    edPartNumber.Text - tedit с партномером
    С партномерами вида "7328PBH" проблем нет, сервер возвращает htm-код страницы.
    А вот с партомерами вида "OEM; SL8VY",
     "312-0383 312-0384 312-0386 310-9080 310-9081 312-0383 312-0384 312-0386 312-0653 451-10297 451-10298 451-10299 KP428 NT372 GD775 GD776 GD785 GD787 HX345 JD605 JD606 JD610 JD616 JD617 JD634 JD648 KD489 KD491 KD492 KD494 KD495 KD496 KP423 MJ456 NT379 PC764 PD685 RC126 RD300 RD301 TC030 TD116 TD117 TD175 TG226 0GD77 0GD787 0JD605 0JD606 0JD610 0JD616 0JD634 0JD648 0KD489 0KD491 0KD494 0KD495 0PD685 0RD300 0RD301 0TC030 0TD116 0TD117 0TD175 0TG226 0UD088 0UG260 HX345 UD088 0TD175 0TG226 0UG260"
    работать не хочет, выдает "connection closed gracefully". Причем это выдается при одиночном запросе - запустил прогу,указал партномер - вывалилась ошибка, тут же указываю нормальный  партномер - сервер возвращает html. Может кто-нибудь объяснить в чем проблема?
  • Сергей М. © (17.03.11 10:46) [1]
    Пробелы в URL запроса - вот в чем проблема.
  • Anatoly Podgoretsky © (17.03.11 11:45) [2]
    > Сергей М.  (17.03.2011 10:46:01)  [1]

    Если URL_Encoded, то это не проблемы.
  • Иван (17.03.11 13:47) [3]

    > Пробелы в URL запроса - вот в чем проблема.

    Спасибо, заменил пробелы на плюсы - вроде заработало.


    > Если URL_Encoded, то это не проблемы.

    URLEncoded надо будет позже попробовать.
  • Anatoly Podgoretsky © (17.03.11 14:05) [4]
    > Иван  (17.03.2011 13:47:03)  [3]

    Тогда и URLEncoded тоже поможет, поскольку одно из его действий замена
    пробелов плюсами.
 
Конференция "Сети" » получить html по IdHTTP с price.ru
Есть новые Нет новых   [134436   +25][b:0][p:0.001]