powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / SOAP запрос без WSDL файла
18 сообщений из 18, страница 1 из 1
SOAP запрос без WSDL файла
    #39903274
PLATONOVDMITRIY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как можно обработать SOAP-запрос без WSDL-файла?

Например, есть запрос:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd=" http://www.w3.org/2001/XMLSchema" xmlns:soap=" http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<LastUpdate xmlns=" http://web.cbr.ru/" />
</soap:Body>
</soap:Envelope>

Это запрос LastUpdate для получения даты последнего обновления базы по КО, взятый с сайта ЦБ РФ ( https://www.cbr.ru/CreditInfoWebServ/CreditOrgInfo.asmx). Предположим, что самого WSDL нет. Как в таком случае можно обработать запрос?
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39903278
PLATONOVDMITRIY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точнее как отправить этот запрос, чтобы сервер его обработал?
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39903279
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PLATONOVDMITRIY
Точнее как отправить этот запрос, чтобы сервер его обработал?


написать руками
WSDL всего лишь описание API сервиса
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39903291
PLATONOVDMITRIY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaratIsk,

с помощью чего это можно реализовать? Компонента idhttp? Как?
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39903367
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PLATONOVDMITRIY
MaratIsk,

с помощью чего это можно реализовать? Компонента idhttp? Как?


Можно и так.
Попробуйте предварительно отладить текст XML с помощью программы SoapUI.
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39903819
PLATONOVDMITRIY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DmSer,

Использую следующий код:

Код: 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.
procedure TForm1.ButtonLastUpdateClick(Sender: TObject);
var
  ResponseOut: TStringStream;
  httpRequest: TStrings;
begin
  ResponseOut := TStringStream.Create;
  httpRequest := TStringList.Create;
  httpRequest.Text :=
  '<?xml version="1.0" encoding="utf-8"?> ' +
  '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> ' +
  ' <soap:Body> ' +
  '   <LastUpdate xmlns="http://web.cbr.ru/" /> ' +
  ' </soap:Body> '+
  '</soap:Envelope>';
  with IdHTTPLastUpdate do
  begin
    Request.ContentEncoding := 'utf-8';
    Request.ContentType := 'application/xml';
    Request.Accept := 'text/xml';
    Request.ContentLength := length(httpRequest.Text);
    Request.ContentType := 'application/soap/xml; charset=utf-8';
    Post('http://www.cbr.ru/CreditInfoWebServ/CreditOrgInfo.asmx', httpRequest,
      ResponseOut);
  end;
  EditResult.Text := ResponseOut.DataString;
end;



Выдаёт ошибку: HTTP/1.1 500 Internal Server Error
С помощью SoapUI получаю верные данные:
Код: xml
1.
2.
3.
4.
5.
6.
7.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <LastUpdateResponse xmlns="http://web.cbr.ru/">
         <LastUpdateResult>2019-12-16T23:27:10.043</LastUpdateResult>
      </LastUpdateResponse>
   </soap:Body>
</soap:Envelope>



Что в исходном коде неверно?
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39903843
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте: Content-Type: text/xml;charset=UTF-8
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39903844
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В SoapUI на вкладке Raw можно увидеть используемые заголовки http-запроса.
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39903859
PLATONOVDMITRIY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DmSer
В SoapUI на вкладке Raw можно увидеть используемые заголовки http-запроса.


Содержимое вкладки RAW:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
POST http://www.cbr.ru/CreditInfoWebServ/CreditOrgInfo.asmx HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "http://web.cbr.ru/LastUpdate"
Content-Length: 214
Host: www.cbr.ru
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)



Заменил в коде на:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with IdHTTPLastUpdate do
  begin
    Post('http://www.cbr.ru/CreditInfoWebServ/CreditOrgInfo.asmx', httpRequest,
      ResponseOut);
    Request.AcceptEncoding := 'gzip, deflate';
    Request.ContentType := 'text/xml;charset=UTF-8';
    HTTPReqRespLastUpdate.SoapAction := 'http://web.cbr.ru/LastUpdate';
    Request.ContentLength := length(httpRequest.Text);
    Request.Host := 'www.cbr.ru';
    Request.Connection := 'Keep-Alive';
    Request.UserAgent := 'Apache-HttpClient/4.1.1 (java 1.5)';
  end;



Ошибка осталась прежней.
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39903945
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PLATONOVDMITRIY,

авторС помощью SoapUI получаю верные данные:

смотри как именно этот soapui обращается к серверу - и сам запрос и заголовки. ну и максимально нужно повторить у себя. смотри, что твой клиент реально передает серверу. не только в коде.
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39904194
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый простой способ узнать, что отправляет компонент IdHTTP - присвоить его свойству Intercept объект TIdLogEvent и реализовать обработчики OnSent и OnReceived.
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39904351
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Самый простой способ узнать, что отправляет компонент IdHTTP - присвоить его свойству Intercept объект TIdLogEvent и реализовать обработчики OnSent и OnReceived.
или Fidler установить
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39904439
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не силен в паскале, но, мне кажется, установка заголовков после вызова post выглядит странной
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39904450
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
DmSer
Самый простой способ узнать, что отправляет компонент IdHTTP - присвоить его свойству Intercept объект TIdLogEvent и реализовать обработчики OnSent и OnReceived.
или Fidler установить



Фидлер только с браузерами работает...
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39904479
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Фидлер только с браузерами работает...
нет
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39904490
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PLATONOVDMITRIY,


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  with IdHTTPLastUpdate do
  begin
    HTTPOptions := HTTPOptions - [hoForceEncodeParams];
    Request.ContentLength := length(httpRequest.Text);
    Request.CustomHeaders.Clear;
    Request.CustomHeaders.Add('SOAPAction: "http://web.cbr.ru/LastUpdate"');
    Request.CustomHeaders.Add('Host: www.cbr.ru');
    Request.ContentType := 'text/xml; charset=utf-8';
    Post('http://www.cbr.ru/CreditInfoWebServ/CreditOrgInfo.asmx', httpRequest,
      ResponseOut);
  end;
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39904914
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
DmSer
Фидлер только с браузерами работает...
нет


Круто! Дописал всего 2 строчки:

Код: pascal
1.
2.
  IdHTTP1.ProxyParams.ProxyServer := '127.0.0.1';
  IdHTTP1.ProxyParams.ProxyPort := 8888;



и Fiddler всё показал!
...
Рейтинг: 0 / 0
SOAP запрос без WSDL файла
    #39904974
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты говори в чем разница была, если нашел
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / SOAP запрос без WSDL файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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