Question

J'utilise Indy10 avec Delphi et essayer d'obtenir de OAuth Google travailler. La première étape consiste à faire une demande à la méthode OAuthGetRequestToken. Le code retourne en dessous d'une erreur 400. Toute aide serait grandement appréciée.

procedure TForm1.Button1Click(Sender: TObject);
    var
      IdHTTP: TIdHTTP;
      IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocketOpenSSL;
      Params: TStringList;
      mString: String;
    begin
      Params := tstringlist.create;
      IdSSLIOHandlerSocket1 := TIdSSLIOHandlerSocketOpenSSL.create(nil);
      IdHTTP := TIdHTTP.create(nil);

      with IdSSLIOHandlerSocket1 do begin
        SSLOptions.Method := sslvSSLv3;
        SSLOptions.Mode :=  sslmUnassigned;
        SSLOptions.VerifyMode := [];
        SSLOptions.VerifyDepth := 2;
      end;
      with IdHTTP do begin
        IOHandler := IdSSLIOHandlerSocket1;
        ReadTimeout := 0;
        AllowCookies := True;
        ProxyParams.BasicAuthentication := False;
        ProxyParams.ProxyPort := 0;
        Request.ContentLength := -1;
        Request.ContentRangeEnd := 0;
        Request.ContentRangeStart := 0;
        Request.ContentType := 'application/x-www-form-urlencoded';
        request.host := 'https://www.google.com';
        Request.Accept := 'text/html, */*';

        Request.BasicAuthentication := False;
        Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
        HTTPOptions := [hoForceEncodeParams];
      end;
      Params.Add('scope=https://www.google.com/analytics/feeds/');
      Params.Add('oauth_consumer_key=anonymous');
      Params.Add('oauth_signature_method=HMAC-SHA1');
      Params.Add('oauth_signature=wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D');
      Params.Add('oauth_timestamp=137131200');
      Params.Add('oauth_nonce=4572616e48616d6d65724c61686176');
      showmessage(HTTPDecode(IdHTTP.Post('https://www.google.com/accounts/OAuthGetRequestToken',Params)));

    end;
Était-ce utile?

La solution

Regardez le datastring de réponse (où l'exception est levée), il vous donnera une raison de plus de détails pour le problème.
Par exemple, en essayant avec votre code, je suis arrivé un « horodatage trop loin de temps en cours », puis après la mise à jour du oauth_timestamp, je suis un « Signature non valide » ...

Autres conseils

Vérifiez si vous obtenez un message de retour dans la tête de réponse , aussi, en plus des 400. La plupart des services Web offrent une sorte de description textuelle sur ce qui se passe mal.

Vérifiez également que la bibliothèque OpenSSL est effectivement chargée, sinon Indy pourrait fallback à la communication non codée, que le serveur peut ne pas accepter.

Essayez de routage de votre demande par HTTP Fiddler .

Je trouve que pour être un excellent outil pour tracer ce qui va mal au niveau http / https.

- jeroen

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top