powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / JSON-запрос через idHTTP.POST ничего не возвращает
19 сообщений из 19, страница 1 из 1
JSON-запрос через idHTTP.POST ничего не возвращает
    #39703815
Bobby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня!
Пытаюсь выполнить JSON-запрос через HTTP.POST с сайта.
Через всесильный F12 выяснил URL, по которому делается запрос и список передаваемых параметров. Делаю все следующим образом:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
var
  Response,RequestBody: TStringStream;
  LJSONObject: TJSONObject;
  sparam:string;

///формирование структуры параметров
//sparam -- структура JSON-запроса 

  sparam:=LJSONObject.ToString; 
  RequestBody := TStringStream.Create(sparam);
  Response := TStringStream.Create('');

    HTTP_J.Request.Accept :='application/json';
    HTTP_J.Request.ContentType := 'application/json';
    //search_text.Text -- URL запроса
    HTTP_J.Post(search_text.Text,RequestBody,Response);

      memo1.Text:=Response.DataString;
      Response.Free;
      RequestBody.Free;



В результате получаю только следующее:
{"totalpages":0,"currpage":1,"totalrecords":0,"invdata":[]}

основной сайт: https://market.mosreg.ru/
URL запроса: https://api.market.mosreg.ru/api/Trade/GetTradesForParticipantOrAnonymous
струкрура параметров:
{"classificatorCodes":[],"CustomerAddress":"","CustomerFullNameOrInn":"","filterDateFrom":"2018-09-10T00:00:00.000Z","filterDateTo":null,"filterFillingApplicationEndDateFrom":null,"FilterFillingApplicationEndDateTo":null,"filterPriceMax":"","filterPriceMin":"","filterTradeEasuzNumber":"","IsImmediate":false,"itemsPerPage":10,"OnlyTradesWithMyApplications":false,"page":1,"ParticipantHasApplicationsOnTrade":"","showOnlyOwnTrades":false,"sortingParams":[],"tradeName":"шланг","tradeState":"","UsedClassificatorType":10}

Подскажите, плз, в чем недоработка и куда копать. Харанее благодарен
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39703822
NetObserver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobby,

Реверс инжениринг?
Может стоит попросить документацию у владельцев сайта?
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39703904
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что нагуглилось, попробуйте:

Код: pascal
1.
2.
response.Position := 0; // !!!
memo1.Lines.LoadFromStream(response);
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704035
Bobby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,
К сожалению не помогло ((
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704083
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК, с Indy если честно давно дела не имел, перешел после каких-то глюков с FTP давно уже на Synapse TCP/IP and serial library .
Держите код, вдруг тоже перейдете :)

Код: 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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
type
   THttpRequestType  = (rqPost, rqGet);

   function SendHttpRequest(AHttpRequestType: THttpRequestType;
                            const AURL, APOSTData: string;
                            const AResponse: TStream;
                            var AErrMsg: string;
                            const AHttpUserName: string = '';
                            const AHttpPassword: string = '';
                            AAsMozillaUserAgent: boolean = false;
                            AAnotherHeaderLines: TStrings = nil;
                            const AProxyServerIP: string = '';
                            const AProxyServerPort: integer = 0;
                            const AProxyUser: string = '';
                            const AProxyPassword: string = ''): Boolean;


USES ssl_openssl, HTTPSend;

//------------------------------------------------------------------------------						
procedure PrepareHTTPSendAsMozilla(AHTTP: THTTPSend);
begin
   AHTTP.UserAgent:='Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0';

   //AHTTP.Headers.Add('Accept-Encoding: gzip, deflate, br');
   AHTTP.Headers.Add('Accept-Language: de,en-US;q=0.7,en;q=0.3');
   AHTTP.Headers.Add('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
end;
//------------------------------------------------------------------------------
procedure WriteTextInStream(const AText: string; AStream: TStream);
var
   pText    : PChar;
begin
   pText:=PChar(AText);
   AStream.Write(pText^,Length(AText));
end;
//------------------------------------------------------------------------------
						

//based on Synapse
//For HTTPS-Support:
//  1) USES ssl_openssl;
//  2) copy libeay32.dll
//  3) copy ssleay32.dll

function SendHttpRequest(AHttpRequestType: THttpRequestType;
                         const AURL, APOSTData: string;
                         const AResponse: TStream;
                         var AErrMsg: string;
                         const AHttpUserName: string;
                         const AHttpPassword: string;
                         AAsMozillaUserAgent: boolean;
                         AAnotherHeaderLines: TStrings;
                         const AProxyServerIP: string;
                         const AProxyServerPort: integer;
                         const AProxyUser: string;
                         const AProxyPassword: string): Boolean;
var
   HTTP: THTTPSend;
begin
   AErrMsg:='';

   HTTP := THTTPSend.Create();
   try
      HTTP.UserName:=AHttpUserName;
      HTTP.Password:=AHttpPassword;
      //-- ShowMessage(HTTP.Sock.SSL.LibName);

      if Trim(AProxyServerIP)<>'' then
      begin
         HTTP.ProxyHost:=Trim(AProxyServerIP);
         HTTP.ProxyPort:=IntToStr(AProxyServerPort);
         HTTP.ProxyUser:=Trim(AProxyUser);
         HTTP.ProxyPass:=Trim(AProxyPassword);
      end;

      if AHttpRequestType=rqPost then
      begin
         WriteTextInStream(APOSTData, HTTP.Document);
         HTTP.MimeType := 'application/x-www-form-urlencoded';
      end;

      if AAsMozillaUserAgent then
         PrepareHTTPSendAsMozilla(HTTP);
               
      if Assigned(AAnotherHeaderLines) then
         HTTP.Headers.AddStrings(AAnotherHeaderLines);

      if AHttpRequestType=rqPost then
         Result := HTTP.HTTPMethod('POST', AURL)
      else
         Result := HTTP.HTTPMethod('GET', AURL);

      if Result then
         AResponse.CopyFrom(HTTP.Document, 0)
      else
         AErrMsg:=HTTP.Sock.LastErrorDesc;
   finally
      FreeAndNil(HTTP);
   end;
end;
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704087
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.
и считывание Response в качестве строки
Код: 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.
var
   Mem       : TMemoryStream;
   sErrMsg   : string;
   bOK       : boolean;
   
   iLen      : integer;
   sResponse : string;
begin
   sResponse:='';
   sErrMsg:='';

   Mem:=TMemoryStream.Create();
   try
      bOK:=SendHttpRequest(AHttpRequestType,
                           AURL,APOSTData,
                           Mem,
                           AErrMsg);

      if bOK then
      begin
         mem.Position:=0;
         iLen:=mem.Size;
         
         if iLen>0 then
         begin
            SetLength(sResponse, iLen);         
            mem.ReadBuffer(sResponse[1], iLen);
         end;
      end
   finally
      FreeAndNil(Mem);
   end;
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704106
Bobby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,
Спасибо, мил человек! Именно это и решил сделать, попробовать через Synapse, а тут такой рояль в кустах. Сейчас буду ковырять
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704114
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tолько сейчас заметил, у вас HTTPS а не HTTP. Возможно, в этом была заковыка.
Но раз вы уже решили переходить на Synapse, вам еще две либы от OpenSSL понадобятся ( ssleay32.dll и libeay32.dll ).

https://indy.fulgan.com/SSL/
openssl-1.0.2n-i386-win32.zip
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704166
Фотография krapotkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если уж переходы, то может и родная либа сгодится ? ))
THttpClient ?
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704320
Bobby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,
С либами все нормально, давно есть уже. Вот только возвращать мне запрос стал примерно вот это (см. вложение). Видимо где-то с кодировкой косяк, не могу понять гду
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704321
Bobby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704328
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю, может вы работаете как с Unicode'ом.
Может надо String на AnsiString заменить ...
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704341
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставьте брейкпоинт и посмотрите, что там в Stream'e. Может покажет .... не знаю, как там в более поздних чем у меня версиях Delphi 6, вдруг дебаггер умеет содержимое MemoryStream'a показывать
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704342
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но по крайней мере можно
Код: pascal
1.
2.
3.
4.
5.
6.
var
   Response  : TMemoryStream
begin 
   ...
   ...
   Response.SaveToFile('response.dat');
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704417
Bobby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,
Все решилось вот чем:
Код: pascal
1.
2.
3.
4.
          Response:=TStringstream.Create('',Tencoding.ASCII);
          Response.CopyFrom(HTTPSend.Document, 0);
          memo1.Text:=(Response.DataString);
          Response.Free;


Но вылезла новая проблема. Сервер вернул в итоге вот что:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
  <TITLE>Bad Request</TITLE>
  <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii">
</HEAD>
<BODY>
  <h2>Bad Request - Invalid Header</h2>
  <hr><p>HTTP Error 400. The request has an invalid header name.</p>
</BODY>
</HTML>


И что с этим делать пока ума не приложу
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704419
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobby"tradeName":"шланг"
А в нужной ли кодировке запрос это отправляет? SmSniff в помощь
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704442
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю, может им заголовков не хватает. Вот из другого запроса, но все же (Воспользуйтесь параметром AAnotherHeaderLines):
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39704465
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формат как в процедуре PrepareHTTPSendAsMozilla
...
Рейтинг: 0 / 0
JSON-запрос через idHTTP.POST ничего не возвращает
    #39705287
Bobby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,
В итоге все заколосилось с THttpClient.
Спасибо за помощь!
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / JSON-запрос через idHTTP.POST ничего не возвращает
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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