我需要知道我在哪里';在Delphi中使用TIdHTTP发布json对象时出错
源代码给出套接字错误14001,带有用于POST的OBJ 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
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字符串
-派生类型,包括Indy的TStream
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?