Код, который вы показали, не может вызвать ошибку сокета (не говоря уже об ошибке 14001, которая даже не является ошибкой сокета), поскольку код даже не скомпилируется!
Метод TIdHTTP.Post()
не имеет перегрузки, которая принимает TlkJSONobject
в качестве ввода. Как это могло? TlkJSONobject
исходит из совершенно другой сторонней библиотеки, она не является частью RTL или Indy. POST
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.
файл, указанный с помощью
String
имя файла
В этом случае вам необходимо использовать TStream
для отправки JSON, хранящегося в памяти. Вы несете ответственность за сохранение вашего TlkJSONobject
контента в подходящем TStream
по вашему выбору. Это выходит за рамки Indy. Например, вы можете использовать TlkJSON.GenerateText()
, чтобы получить JSON в String
, а затем POST
, используя TStringStream
.
В примечании, URL, который вы передаете TIdHTTP.Post()
, искажен. Правильный разделитель между именем хоста и номером порта - это двоеточие (:
), а не точка с запятой (;
).
С учетом сказанного попробуйте следующее:
jso := TlkJSONobject.Create;
jso.Add('InvoiceNumber', '');
jso.Add('POSID', '910441');
jso.add('USIN', ePOSNo.Text);
jso.add('DATETIME', eDate.Text);
IdHTTP1.Request.Accept := 'application/json';
IdHTTP1.Request.ContentType := 'application/json';
{ Call the Post method of TIdHTTP and read the result into TMemo }
PostData := TStringStream.Create(TlkJSON.GenerateText(jso), TEncoding.UTF8);
try
Memo1.Lines.Text := IdHTTP1.Post('http://localhost:8524/api/IMSFISCAL/GetInvoiceNumberByModel', PostData);
finally
PostData.Free;
end;