Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как передать XML-документ через idHTTP.Post? / 19 сообщений из 19, страница 1 из 1
24.04.2010, 16:54
    #36596303
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?xml version=" 1 . 0 " encoding="utf- 8 "?>  
 <request no=" 1 " sr="sender">
  <sec1>
    <text>Привет</text>
    <sec2="test"/>
  </sec1>
  <security>
   <login value="mylogin"/>
   <pass value="mypass"/>
   </security>
 </request>  

При заполнении xmldocument слово Привет из ansi перекодировал в utf8 получалось Привет
так и передавал

В Delphi 7 передавал так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 var 
  s: TStrings;
  send_php: String ;
 begin 
  s := TStringList.Create;
  s:=xlmdocument1.xml;
  IdHTTP1.Post('http://www.mysite.ru/test.php',ss);
  ss.Free;
 end ;

Но как отправить то же самое в Delphi 2010 не знаю, от сервера приходят ?????? вместо Привет...

Уже 3 суток пытаюсь, но ничего не получается. Прошу Вашей помощи в этом вопросе.
...
Рейтинг: 0 / 0
24.04.2010, 18:29
    #36596386
monsenior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
antox,
В 2010 юзает юникод - отсюда ноги проблемы!
...
Рейтинг: 0 / 0
24.04.2010, 18:30
    #36596388
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
monseniorantox,
В 2010 юзает юникод - отсюда ноги проблемы!
Это я понял, а вот как юзать не могу придумать...
...
Рейтинг: 0 / 0
24.04.2010, 18:47
    #36596395
monsenior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
antoxmonseniorantox,
В 2010 юзает юникод - отсюда ноги проблемы!
Это я понял, а вот как юзать не могу придумать...
Используйте ансистринг, а если более правельно научите вашу пхп работать с юникодом)
...
Рейтинг: 0 / 0
24.04.2010, 20:25
    #36596427
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
в INDY 10.5.5 реальные глюки. Перерыл весь интернет ничего толкового не нашел по этому вопросу кроме TStringStream не нашел, но при xml этого было не достаточно.

Всё сделал... 3ое суток... За то доволен результатом :)
Так что лучше пользоваться indy 9 и Delphi 7

Топик закрыт, по крайней мере до завтра ;)
...
Рейтинг: 0 / 0
24.04.2010, 20:32
    #36596431
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
Говорят, что в indy 10.5.7 некоторые проблемы решены, по крайней мере с кодировкой Р - заглавной русской буквой. Но видимо лучше подождать, когда появится реально или хотя бы относительно стабильная юникодная indy
...
Рейтинг: 0 / 0
26.04.2010, 14:00
    #36598402
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
antoxГоворят, что в indy 10.5.7 некоторые проблемы решены, по крайней мере с кодировкой Р - заглавной русской буквой. Но видимо лучше подождать, когда появится реально или хотя бы относительно стабильная юникодная indy
Ну так установи последнюю версию и попробуй
тынц
...
Рейтинг: 0 / 0
26.04.2010, 18:29
    #36599163
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
X11,

Пока всё работает, дистрибутив я качал, но ставить побоялся... Подожду, может delphi update установит
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
13.02.2019, 18:05
    #39773522
RESEARCH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
Коллеги добрый день.

Необходимо отправить на сервер следующий запрос

Accept:application/json
Content-Type:application/xml
Authorization:Mindbox secretKey="5jiFKYsb0kOSbtM2WEY"

<operation>
<page>
<firstMindboxId>1</firstMindboxId>
<pageNumber>1</pageNumber>
<itemsPerPage>200</itemsPerPage>
</page>
</operation>

делаю так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
begin


  HandlerSocket := TIdSSLIOHandlerSocket.Create(HTTP);
  HandlerSocket.SSLOptions.Mode   := sslmClient;
  HandlerSocket.SSLOptions.Method := sslvSSLv23;
  HTTP:= TIdHTTP.Create(nil);
  HTTP.IOHandler := HandlerSocket;
  HTTP.HandleRedirects:=true;
  HTTP.Request.BasicAuthentication := false;;



  XML:='<operation>'                           +EOL+
         '<page>'                              +EOL+
           '<firstMindboxId>1</firstMindboxId>'+EOL+
           '<pageNumber>1</pageNumber>'        +EOL+
           '<itemsPerPage>10</itemsPerPage>'   +EOL+
          '</page>'                            +EOL+
       '</operation>';

   HTTP.Request.CustomHeaders.Add('Mindbox secretKey="5jiFKYsb...."');


   HTTP.Request.Host           := 'api.mindbox.ru';
   HTTP.Request.Accept         :='application/xml';
   HTTP.Request.ContentType    :='application/xml';
   HTTP.Request.BasicAuthentication:=false;





  URL:='https://api.mindbox.ru/v3/operations/sync&operation=BalanceChanges';
  LOGN:=TStringList.Create();
  RESP:= TStringStream.Create('');
  LOGN.Clear;
  LOGN.Add('Accept:application/xml');
  LOGN.Add('Content-Type:application/xml');
  LOGN.Add('Authorization:Mindbox secretKey="5jiFKYsb0k....."');
  LOGN.Add(XML);



  repeat
  try RSP:=HTTP.Post(URL,LOGN) except writeln('ERR>'+HTTP.ResponseText+HTTP.Response.ResponseText) end;
  writeln(RSP);



получаю 401 Bad Request

подскажите куда сувать эти поля

Accept:application/json
Content-Type:application/xml
Authorization:Mindbox secretKey="5jiFKYsb0k........"

в общий StringList или в HTTP.Request

а так же правильно ли я передаю XML ?
...
Рейтинг: 0 / 0
13.02.2019, 18:08
    #39773524
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
RESEARCHделаю так

Выглядит так, будто ты тупо скопипастил вместе все нагуглившиеся куски даже не пытаясь
разобраться что они делают и соотнести с тем, что тебе требуется. Не делай так.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.02.2019, 18:57
    #39773543
RESEARCH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
о коллеги у меня серьезные успехи

ошибка изменилась на 400 BadRequestText

очевидно неправильно передаю XML но как ?

на данный момент код выглядит так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
  HandlerSocket := TIdSSLIOHandlerSocket.Create(HTTP);
  HandlerSocket.SSLOptions.Mode   := sslmClient;
  HandlerSocket.SSLOptions.Method := sslvSSLv23;
  HTTP:= TIdHTTP.Create(nil);
  HTTP.IOHandler := HandlerSocket;
  HTTP.HandleRedirects:=true;

  HTTP.Request.Host           :='api.mindbox.ru';
  HTTP.Request.Accept         :='application/xml';
  HTTP.Request.ContentType    :='application/xml';

  HTTP.Request.CustomHeaders.Add('ContentType');
  HTTP.Request.CustomHeaders.Values['ContentType']:='application/xml';
  HTTP.Request.CustomHeaders.Add('Accept');
  HTTP.Request.CustomHeaders.Values['Accept']:='application/xml';
  HTTP.Request.CustomHeaders.Add('Authorization');
  HTTP.Request.CustomHeaders.Values['Authorization']:='Mindbox secretKey="5jiFKYsb0k..."';

     XML:='<operation>'                        +EOL+
         '<page>'                              +EOL+
           '<firstMindboxId>1</firstMindboxId>'+EOL+
           '<pageNumber>1</pageNumber>'        +EOL+
           '<itemsPerPage>10</itemsPerPage>'   +EOL+
          '</page>'                            +EOL+
       '</operation>'+EOL;

  URL:='https://api.mindbox.ru/v3/operations/sync?endpointId=RiglaWebAPI&operation=BalanceChanges';
  LOGN:=TStringList.Create();
  Param:= TStringStream.Create(XML);

  repeat
  try RSP:=HTTP.Post(URL,Param) except writeln('ERR>'+HTTP.ResponseText) end;
  writeln(RSP);




и еще как прочитать ответ от сервера который возвращает например postman
в ResponseText его нет


{
"status": "ProtocolError",
"errorMessage": "Доступ запрещён.",
"errorId": "3dbff5be-15d9-4bc6-a0c7-f5fa66f0c7e7",
"httpStatusCode": 403
}

кроме
...
Рейтинг: 0 / 0
13.02.2019, 21:01
    #39773596
RESEARCH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
Коллеги спасибо за поддержку, советские ученые добились успеха.

Вот окончательный рабочий вариант кода

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
  HandlerSocket := TIdSSLIOHandlerSocket.Create(HTTP);
  HandlerSocket.SSLOptions.Mode   := sslmClient;
  HandlerSocket.SSLOptions.Method := sslvSSLv23;
  HTTP:= TIdHTTP.Create(nil);
  HTTP.IOHandler := HandlerSocket;

  HTTP.Request.Accept         :='application/xml';
  HTTP.Request.ContentType    :='application/xml';
  HTTP.Request.CustomHeaders.Values['Authorization']:='Mindbox secretKey="'+PASS+'"';
  //URL:='https://api.mindbox.ru/v3/operations/sync?endpointId=WebAPI&operation=BalanceChanges';
  XML:='<operation>'                           +
        '<page>'                               +
           '<firstMindboxId>1</firstMindboxId>'+
           '<pageNumber>1</pageNumber>'        +
           '<itemsPerPage>10</itemsPerPage>'   +
          '</page>'                            +
       '</operation>';
  LOGN:=TStringList.Create();
  LOGN.Add(XML);

  try RSP:=HTTP.Post(URL0,LOGN) except writeln('ERR>'+HTTP.ResponseText) end;
  RSP:=UTF8Decode(RSP);
  writeln(RSP);



добавлю что для работы TIdSSLIOHandlerSocket необходимы положить в папку с кодом две библиотеки libelay32.dll и ssleay32.dll
скачать которые можно здесь для разных платформ
...
Рейтинг: 0 / 0
13.02.2019, 21:06
    #39773600
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
Метод научного тыка в действии.
RESEARCHНеобходимо отправить на сервер следующий запрос
Accept: application/json

RESEARCH HTTP.Request.Accept :=' application/xml ';
Прэлеeсно...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.02.2019, 21:20
    #39773602
RESEARCH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
Необходимо отправить на сервер следующий запрос
Accept:application/json

этот параметр влияет на формат возвращаемых данных, можно поставить и так и так
...
Рейтинг: 0 / 0
13.02.2019, 21:27
    #39773604
RESEARCH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
кстати пока остался нерешенный один вопрос

при первом вызове HTTP.Get или Post вылетает исключение "Не подгружены SSL библиотеки"
приходится пропускать первый вызов по try except end;

потом они как то сами подгружаются, что то не соображу как их подгрузить при инициализации
...
Рейтинг: 0 / 0
14.02.2019, 08:35
    #39773680
krapotkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
в последних версиях делфи нет никаких проблем с SSL
и есть нативный THttpClient без всяких инди, регистраций и SMS и DLL
переход занимает несколько минут
...
Рейтинг: 0 / 0
14.02.2019, 12:54
    #39773798
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
krapotkinTHttpClient

А как там дела с куками обстоят? Можно ли менять, получать, удалять?
...
Рейтинг: 0 / 0
14.02.2019, 12:57
    #39773801
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
krapotkinTHttpClient

имеется ввиду TNetHTTPClient?

http://docwiki.embarcadero.com/RADStudio/Rio/en/Using_an_HTTP_Client
...
Рейтинг: 0 / 0
14.02.2019, 20:00
    #39774086
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать XML-документ через idHTTP.Post?
X11krapotkinTHttpClient

А как там дела с куками обстоят? Можно ли менять, получать, удалять?
http://docwiki.embarcadero.com/Libraries/Rio/en/System.Net.HttpClient.TCookies
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как передать XML-документ через idHTTP.Post? / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]