سؤال

أنا أستخدم Indy10 مع Delphi وأحاول الحصول عليها Google's Oauth للعمل. الخطوة الأولى هي تقديم طلب إلى طريقة OauthgetRequestToken. الكود أدناه يعيد خطأ 400. أي مساعدة سيكون موضع تقدير كبير.

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;
هل كانت مفيدة؟

المحلول

انظر إلى بيانات الاستجابة (حيث يتم رفع الاستثناء) ، وسيعطيك سببًا أكثر تفصيلًا للمشكلة.
على سبيل المثال ، في محاولة مع الكود الخاص بك ، حصلت أولاً على "Timestamp بعيدًا جدًا عن الوقت الحالي" ، ثم بعد تحديث OAUTH_TIMESTAMP ، حصلت على "توقيع غير صالح" ...

نصائح أخرى

تحقق مما إذا كنت قد حصلت على رسالة إرجاع في رأس الاستجابة, ، أيضًا ، إلى جانب 400. توفر معظم خدمات الويب نوعًا من الوصف النصي حول الخطأ الذي يحدث.

تحقق أيضًا من أن مكتبة OpenSSL قد تم تحميلها بالفعل ، وإلا فإن Indy قد تتوقف عن الاتصالات غير المشفرة ، والتي قد لا يقبلها الخادم.

حاول توجيه طلبك من خلال HTTP Fiddler.

لقد وجدت أن أداة ممتازة لتتبع ما يحدث على مستوى HTTP/HTTPS.

-جيرون

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top