 
dadata и Delphi
Здравствуйте. К сожалению не нашел модуля на делфи. Мне надо создать запрос по XML. Получить ответ .
Целый день пытаюcь, но не получается. МОжет у кого то есть готовые решения, как сделать запрос и получить ответ на DELPHI? Интересует XML
Вот что насобирал. Компилируется. Но ошибка там неверный запрос.
procedure TForm1.Button1Click(Sender: TObject);
var ResponseOut: TStringStream;
     httpRequest:TStrings;
begin
 ResponseOut := TStringStream.Create('');
 httpRequest := TStringList.Create;
 httpRequest.Add ('Content-Type: application/xml');
 httpRequest.Add ('Accept: application/xml');
 httpRequest.Add ('Authorization: Token ***');
 httpRequest.Add ('<req>');
httpRequest.Add  ('<query>Москва</query>');
 httpRequest.Add ('</req>');
 with IdHTTP1 do
 begin
  Request.ContentType:='text/xml; charset=utf-8';
  IdHTTP1.Post('http://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address',httpRequest,ResponseOut);
 end;
memo1.Lines.Add(ResponseOut.DataString);
end;
end.
Сервис поддержки клиентов работает на платформе UserEcho
 Вопросы
		
		
	
Вопросы 
                
Все получилось!
procedure TForm1.Button1Click(Sender: TObject);
var
stringstream: TStringStream;
begin
stringstream:=TStringStream.Create('');
try
IdHTTP1.Request.ContentEncoding := 'utf-8';
IdHTTP1.Request.ContentType:='application/xml';
IdHTTP1.Request.Accept:='application/xml';
IdHTTP1.Request.CustomHeaders.Add('Authorization: Token ***');
stringstream.WriteString(UTF8Encode('<req><query>Киров</query></req>'));
Memo1.Text:=IdHTTP1.Post('http://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address', stringstream);
Memo1.Text :=Utf8ToAnsi(Memo1.Text)
finally
stringstream.Free;
end;
end;
end.
Отлично! Спасибо, что сообщили.
Если появятся вопросы — обращайтесь.
пытаюсь повторить код, но возвращается http/1.1 500 internal Server Error.
на форме IdHTTP1 + IdSSLIOHandlerSocketOpenSSL1.
Может IdHTTP1 еще надо как-то настраивать? подскажите как
Приложите полный код архивом, посмотрим.
Понял ошибку. Отправлял фамилию на адрес проверки организаций
Хорошо, что разобрались. Пишите, если будут вопросы.
Добрый день, тоже пытаюсь повторить код в Delphi, но всегда выдает ошибку: Project Project1.exe raised exception class EIdHTTPProtocolException with message 'HTTP/1.1 400 Bad Request'.
В чем может быть проблема?
Разобрался, потомкам может пригодится:
function GetDaData(URL, ContentType, Accept, Token, Body: string): string; var IdHTTP1: TIdHTTP; StringStream: TStringStream; begin IdHTTP1 := TIdHTTP.Create; StringStream := TStringStream.Create('', TEncoding.UTF8); try IdHTTP1.HTTPOptions := [hoKeepOrigProtocol,hoForceEncodeParams,hoNoProtocolErrorException,hoWantProtocolErrorContent]; IdHTTP1.Request.ContentEncoding := 'UTF-8'; IdHTTP1.Request.ContentType := ContentType; IdHTTP1.Request.Accept := Accept; IdHTTP1.Request.CustomHeaders.Add('Authorization: Token ' + Token); StringStream.WriteString(Body); Result := IdHTTP1.Post(URL, StringStream); finally StringStream.Free; IdHTTP1.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var URL: string; ContentType: string; Accept: string; Token: string; Body: string; begin URL := 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/fio'; ContentType := 'application/xml'; Accept := 'application/xml'; Token := '***'; Body := 'Рос'; Memo1.Text := GetDaData(URL, ContentType, Accept, Token, Body) end; procedure TForm1.Button2Click(Sender: TObject); var URL: string; ContentType: string; Accept: string; Token: string; Body: string; begin URL := 'http://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address'; ContentType := 'application/json'; Accept := 'application/json'; Token := '***'; Body := '{ "query": "Рос" }'; Memo1.Text := GetDaData(URL, ContentType, Accept, Token, Body) end;