我需要知道我在哪里';在Delphi中使用TIdHTTP发布json对象时出错

我需要知道我在哪里';在Delphi中使用TIdHTTP发布json对象时出错,json,delphi,post,indy,idhttp,Json,Delphi,Post,Indy,Idhttp,源代码给出套接字错误14001,带有用于POST的OBJ JSON参数消息 jso := TlkJSONobject.Create; // (data) as TlkJSONobject; jso.Add('InvoiceNumber', ''); jso.Add('POSID', '910441'); jso.add('USIN', ePOSNo.Text); jso.add('DATETIME', eDate.Text); IdHTTP1.Request.Accept := 'ap

源代码给出套接字错误14001,带有用于POST的OBJ JSON参数消息

jso := TlkJSONobject.Create; // (data) as TlkJSONobject;   

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 }
Memo1.Lines.Text := IdHTTP1.Post('http://localhost;8524/api/IMSFISCAL/GetInvoiceNumberByModel', JSO);
json不能作为tstream传递


需要相关帮助

您显示的代码无法生成套接字错误(更不用说错误14001,它甚至不是套接字错误),因为代码甚至无法编译

TIdHTTP.Post()
方法没有接受
TlkJSONobject
作为输入的重载。怎么可能呢
TlkJSONobject
来自完全不同的第三方库,它不是RTL或Indy的一部分。使用
TIdHTTP
只能
POST
发布以下内容:

  • t字符串
    -派生类型
  • TStream
    -派生类型,包括Indy的
    TIdMultiPartFormDataStream
  • 字符串
    文件名指定的文件
在这种情况下,您需要使用
TStream
发布存储在内存中的JSON。您有责任将
TlkJSONobject
内容保存到您选择的合适的
TStream
。这超出了印地的范围。例如,您可以使用
TlkJSON.GenerateText()
将JSON转换为
字符串
,然后使用
TStringStream
发布它

另一方面,您传递给
TIdHTTP.Post()
的URL格式不正确。主机名和端口号之间的正确分隔符是冒号(
),而不是分号(

话虽如此,请尝试以下方法:

jso:=TlkJSONobject.Create;
jso.Add(‘发票编号’,“”);
jso.Add('POSID','910441');
jso.add('USIN',ePOSNo.Text);
jso.add('DATETIME',eDate.Text);
IdHTTP1.Request.Accept:=“应用程序/json”;
IdHTTP1.Request.ContentType:=“应用程序/json”;
{调用TIdHTTP的Post方法并将结果读入TMemo}
PostData:=TStringStream.Create(TlkJSON.GenerateText(jso),TEncoding.UTF8);
尝试
Memo1.Lines.Text:=IdHTTP1.Post('http://localhost:8524/api/IMSFISCAL/GetInvoiceNumberByModel,PostData);
最后
PostData.Free;
结束;

我会记住这个答案,以备将来工作之用+1) ,谢谢。:我正在连接中收到错误#10061refused@Hamza你是否像我描述的那样修复了格式错误的URL?如果是这样,那么该错误意味着您可能没有在端口8524jso:TlkJSONobject上的
localhost
(127.0.0.1)上运行HTTP服务器;PostData:TstringStream;beginjso:=TlkJSONobject.Create;jso.Add(‘发票编号’,“”);jso.Add('POSID','910441');jso.add('USIN',ePOSNo.Text);jso.add('DATETIME',eDate.Text);IdHTTP1.Request.Accept:=“应用程序/json”;IdHTTP1.Request.ContentType:=“应用程序/json”;{调用TIdHTTP的Post方法并将结果读入TMemo}PostData:=TStringStream.Create(TlkJSON.GenerateText(jso));try Memo1.Lines.Text:=IdHTTP1.Post(“”,PostData);最后是PostData.Free;结束@Hamza假设您的URL实际上以http://
开头,并且我的浏览器不只是隐藏它,那么代码就可以了(您使用的是哪个版本的Delphi?)。同样,您是否在本地计算机上运行HTTP服务器,在端口8524上监听127.0.0.1?