[Delphi] Indy -> GET -> Русские символы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Kandi, 12 Dec 2012.

  1. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Появилась такая трабла при GET запросе например на - москва.рф идёт запрос - ??????.??, т.е. внутри инди где-то происходит нехорошая кодировка в моём случае. Проверил на ICS, там всё хорошо уходит и приходит, ну переделывать проект на ICS ой как не хочется. Подскажите кто с таким сталкивался и как с этим боролся?! Заранее спасибо. :( :(
     
  2. BigBear

    BigBear Escrow Service
    Staff Member Гарант - Escrow Service

    Joined:
    4 Dec 2008
    Messages:
    1,801
    Likes Received:
    920
    Reputations:
    862
    Code:
    try
       idHTTP1.Get(url, stream);
       stream.Position := 0;
       strings := tStringList.Create;
       strings.LoadFromStream(stream);
       MText.Assign(strings);
       [COLOR=Red]MText.Text:=UTF8ToANSI(MText.Text);[/COLOR]
       strings.Free;
       finally
       stream.Free;
       end;
    Вот так конвертировал получаемый ответ.
     
    _________________________
    1 person likes this.
  3. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    У меня не с ответом проблема, а с запросом на русский домен..вместо русских символов запрос идёт с вопросительными знаками.
    Например запрос из программы:
    Code:
    idHTTP.Get('http://москва.рф');
    Запрос в снифере:
    Code:
    http://??????.??
     
    #3 Kandi, 12 Dec 2012
    Last edited: 12 Dec 2012
  4. 2echnoman

    2echnoman New Member

    Joined:
    3 Jul 2012
    Messages:
    54
    Likes Received:
    0
    Reputations:
    0
  5. seosimf

    seosimf Member

    Joined:
    3 Mar 2011
    Messages:
    271
    Likes Received:
    44
    Reputations:
    6
  6. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Спс, просвятился) Но вообще я привёл наверное не много не правильный пример с доменом. У меня немного иная задача, но похожая проблема. Хост - на латинеце, ответ на каптчу передаётся GET запросом серверу и когда я передаю ответ каптчи, например:

    Code:
    IdHTTP.Get('http://block.ru/?answer=яманал');
    А через сниффер инди шлёт серверу следующее:

    Code:
    IdHTTP.Get('http://block.ru/?answer=??????');
    На ICS отсылает всё как надо, а indy че-то плохо себя ведёт.

    :(
     
  7. seosimf

    seosimf Member

    Joined:
    3 Mar 2011
    Messages:
    271
    Likes Received:
    44
    Reputations:
    6
    Не хочу казаться кепом, но разве не очевидно что нужно делать percent‐encoding(aka Кодирование URL)?
     
  8. muip

    muip New Member

    Joined:
    1 Sep 2011
    Messages:
    45
    Likes Received:
    4
    Reputations:
    0
    Попробуй:

    Code:
    IdHTTP.Get('http://block.ru/?answer='+utf8encode('яманал'));
    
     
  9. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Такое не катит(

    URLEncode сервер не хочет воспринимать вообще :(








    P.S. Спустя пару часов, всё же мозго..ба проблему удалось решить. Ура, Ура, Ура! :)

    Code:
    IdHTTP.IOHandler.DefStringEncoding := TEncoding.ANSI;
    А Всё так было просто, жесть :)
     
    #9 Kandi, 14 Dec 2012
    Last edited: 14 Dec 2012