【发布时间】:2014-07-24 09:46:42
【问题描述】:
我确定我在这里做错了什么。我已经按照我可以在 stackoverflow 上找到的每个示例进行操作,但仍然没有在我的环境中使用它。我很想更新我的控件和环境,但我目前被我所拥有的东西所束缚。
我正在使用:
- 德尔福 7
- 印地 10.0.52
- ulkJSON.pas v1.07
我需要将此 JSON 发送到 URL:
"auth": {
"applicationId": "appID",
"applicationPassword": "pwd",
"accountId": "acct",
"userId": "dev"
}
这并没有什么特别疯狂的地方,但是当我尝试发布我的请求时,我往往会收到一条消息,即请求已正常关闭。 IDSocketHandle.pas 中的 CheckIsReadable 具有 Handleallocated = false。我不确定我在配置 IdHTTP 时做错了什么,但它就是行不通。
我已经尝试了所有这些问题的示例以及更多示例,但这些方法似乎都不适合我:
- Post JSON data to RESTful datasnap server from delphi client
- Sending a JSON encoded object using Indy and Delphi
- Delphi TIdhttp Post JSON?
- Delphi TIdhttp Post JSON?
- What’s the simplest way to call Http POST url using Delphi?
任何提示将不胜感激。
当前的变体如下所示:
procedure Tformmaintestbed.btnJSONSendClick(Sender: TObject);
var
code: Integer;
sResponse: string;
JsonToSend: TStringStream;
begin
JsonToSend := TStringStream.Create(
'{"auth": {"applicationId": "' + edApplication.text +
'","applicationPassword": "' + edpassword.text +
'","accountId": "' + edaccount.text +
'","userId": "' + edUser.text +
'"}}');
try
HTTP1.Request.ContentType := 'application/json';
HTTP1.Request.ContentEncoding := 'utf-8';
memoRequest.lines.clear;
memoRequest.lines.add(JsonToSend);
try
sResponse := HTTP1.Post(cbAddress.text, JsonToSend);
except
on E: Exception do
ShowMessage('Error on request: '#13#10 + e.Message);
end;
memoResponse.lines.clear;
memoresponse.lines.add(sResponse);
finally
JsonToSend.Free();
end;
end;
idHTTP 组件的当前设置如下:
object HTTP1: TIdHTTP
IOHandler = IdSSLIOHandlerSocketOpenSSL1
AuthRetries = 0
AuthProxyRetries = 0
AllowCookies = True
HandleRedirects = True
ProxyParams.BasicAuthentication = False
ProxyParams.ProxyPort = 0
Request.ContentEncoding = 'utf-8'
Request.ContentLength = -1
Request.ContentRangeEnd = 0
Request.ContentRangeStart = 0
Request.ContentRangeInstanceLength = 0
Request.ContentType = 'application/json'
Request.Accept = 'application/json'
Request.BasicAuthentication = False
Request.UserAgent = 'Mozilla/3.0 (compatible; Indy Library)'
HTTPOptions = [hoForceEncodeParams]
Left = 564
Top = 120
end
【问题讨论】:
-
请求发送成功后,“just won't work”是什么意思呢?你期望发生什么?
-
1) JSON 只是一个文本字符串:Tidhttp 应该可以正常工作,2) 您应该将 HTTP 标头中的 "content-type" 设置为“text/json”或“application/json”,3)您绝对应该使用像 Wireshark 或 Fiddler2 这样的工具来查看您的 JSON 是否正在发送,以及服务器如何(或是否)响应。
-
请显示不适合您的实际代码。不要只是指导我们看别人的例子。显示您实际使用的代码。您可能没有将这些示例正确地整合到您的项目中。
-
我将内容类型设置为与帖子中列出的示例相匹配。将有一条响应 JSON 消息,我可以对其进行解析以获取令牌。然后,该令牌可用于对该站点进行其他调用。随着 Fiddler 的运行,没有消息显示给我。看起来我什至没有收到消息。
-
如果您需要有关不起作用的代码的帮助,请务必发布不起作用的代码。当您不展示如何配置它时,也很难说出您在“配置您的 IdHTTP”方面做错了什么。如果您在此处需要帮助,则需要提供相关信息。要求我们推测可能出了什么问题是没有意义的,什么时候您可以包括您正在做的事情,我们可以尝试并专门帮助您。请edit您的问题并在那里添加信息,它可以正确格式化并且人们可以很容易地找到它。谢谢。