Pregunta

Estoy utilizando Indy10 con Delphi y tratando de conseguir OAuth de Google trabajar. El primer paso es hacer una petición al método OAuthGetRequestToken. El código siguiente devuelve un error 400. Cualquier ayuda sería muy apreciada.

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;
¿Fue útil?

Solución

Mire la DataString respuesta (donde se produce la excepción), que le dará un mayor detalle razón del problema.
Por ejemplo, tratando con su código, llegué por primera vez una "marca de tiempo demasiado lejos de la hora actual", a continuación, después de actualizar el oauth_timestamp, tengo una "firma no válida" ...

Otros consejos

Comprobar si recibe un mensaje de retorno en la respuesta cabecera , también, además de los 400. La mayoría de los servicios web ofrecen algún tipo de descripción textual de lo que va mal.

También verifique que la biblioteca OpenSSL se carga realmente, de lo contrario podría Indy vuelve a los de comunicación no codificada, que el servidor puede no aceptar.

Trate de enrutamiento de su solicitud a través HTTP violinista .

Me pareció que para ser una excelente herramienta para rastrear lo que va mal en http / https nivel.

- Jeroen

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top