Frage

Ich bin mit Indy10 mit Delphi und zu versuchen, zu bekommen Google OAuth zu arbeiten. Der erste Schritt ist, eine Anfrage an die OAuthGetRequestToken Verfahren zu machen. Der folgende Code liefert einen 400 Fehler. Jede Hilfe wäre sehr geschätzt.

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;
War es hilfreich?

Lösung

Sehen Sie sich die Antwort Datenzeichen (wo die Ausnahme ausgelöst wird), es wird Ihnen ein detaillierter Grund für das Problem.
Zum Beispiel mit Ihrem Code versucht, ich zum ersten Mal einen „Zeitstempel zu weit von den aktuellen Zeit“, dann nach dem oauth_timestamp Aktualisierung, bekam ich einen „Invalid Signature“ ...

Andere Tipps

Überprüfen Sie, ob Sie eine Rückmeldung in der get Response-Header Auch neben den 400. Die meisten Web-Services bieten eine Art von Textbeschreibung auf das, was nicht in Ordnung ist.

Überprüfen Sie auch, dass die OpenSSL-Bibliothek geladen ist eigentlich, sonst Indy auf unverschlüsselte Kommunikation Rückfall könnte, die der Server möglicherweise nicht akzeptieren.

Versuchen Sie Routing Ihre Anfrage durch HTTP Fiddler .

Ich fand, dass ein hervorragendes Instrument, um zu verfolgen, was auf http / https-Ebene schief geht.

- jeroen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top