Delphi HTTP Post JSON

Je suis sûr que je suis en train de faire quelque chose de mal ici. J'ai suivi tous les exemples que je peux trouver sur stackoverflow et je n'ai toujours pas réussi à faire ce travail dans mon environnement. J'aimerais mettre à jour mon contrôles et de l'environnement, mais je suis actuellement enfermée avec ce que j'ai.

Je suis en utilisant:

  • Delphi 7
  • Indy 10.0.52
  • ulkJSON.pas v1.07

J'ai besoin d'envoyer ce JSON à l'adresse URL suivante:

"auth": {
    "applicationId": "appID",
    "applicationPassword": "pwd",
    "accountId": "acct",
    "userId": "dev"
}

Il n'y a pas quelque chose de terriblement fou à ce sujet, mais quand j'essaie de poster ma demande, j'ai tendance à obtenir un message indiquant que la demande a été Fermée Correctement. CheckIsReadable dans IDSocketHandle.pas a Handleallocated = false. Je ne suis pas sûr de ce que j'ai fait de mal dans la configuration de ma IdHTTP, mais il juste ne fonctionnera pas.

J'ai essayé des exemples de toutes ces questions et à plusieurs autres, mais aucune de ces approches semblent fonctionner pour moi:

Des conseils seraient grandement appréciés.

La variante actuelle ressemble à ceci:

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;

La idHTTP composant est courant de définir comme suit:

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
Lorsque la demande a été envoyée avec succès, ce qui n' "il ne fonctionne pas" signifie alors? Qu'est-ce que vous attendez?
1) JSON est juste une chaîne de texte: Tidhttp devrait fonctionner correctement, 2), Vous devriez probablement "content-type" dans l'en-tête HTTP "text/json" ou "application/json", 3) Vous devriez certainement utiliser un outil comme Wireshark ou Fiddler2 pour voir si votre JSON envoi, et comment (ou si) le serveur répond.
S'il vous plaît montrer le code qui ne fonctionne pas pour vous. Ne vous contentez pas de nous orienter à regarder les autres exemples. Montrer le code que VOUS utilisez réellement. Il est probable que vous n'avez pas intégrer ces exemples dans votre projet correctement.
J'ai défini le type de contenu pour correspondre aux exemples présentés dans les postes. Il y aura une réponse JSON message que je peut l'analyser pour obtenir un jeton. Ce jeton peut ensuite être utilisé pour faire d'autres appels pour le site. Avec un violon cours d'exécution pas de messages ont montré pour moi. On dirait que je ne suis pas à même de recevoir un message.
Si vous voulez de l'aide avec votre code qui ne fonctionne pas, il est important que vous poste le code qui ne fonctionne pas. Il est également difficile de dire ce que vous avez fait de mal à "configuration de votre IdHTTP" quand vous ne vous montrez pas comment vous configurez. Si vous voulez de l'aide ici, vous devez inclure les informations pertinentes. Il est inutile de nous demander de spéculer sur ce qui pourrait être mal, quand vous pouvez inclure ce que vous faites et nous pouvons essayer et spécifiquement de vous aider. Veuillez modifier votre question et y ajouter les informations là où il peut être correctement formaté et les gens peuvent facilement trouver. Merci.

OriginalL'auteur Jared Sherman | 2014-06-03