2016-08-08 1 views
0

J'essaie d'utiliser Indy pour récupérer un jeton RevAcontent oAuth selon this page. Voici mon code:Utilisation d'Indy pour récupérer le jeton OAuth Revcontent

procedure TForm2.Button1Click(Sender: TObject); 
var 
    IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocketOpenSSL; 
    idhttp:tidhttp; 
    params: TStringList; 
begin 
    idhttp:=tidhttp.create(self); 
    IdSSLIOHandlerSocket1 := TIdSSLIOHandlerSocketOpenSSL.create(nil); 
    with IdSSLIOHandlerSocket1 do begin 
    SSLOptions.Method := sslvSSLv23; 
    SSLOptions.SSLVersions := [sslvSSLv23]; 
    end; 

    params := TStringList.create; 
    params.add('clientid=xxyyzz'); 
    params.add('client_secret=xxyyzzxxyyzzxxyyzzxxyyzzxxyyzzxxyyzz'); 
    params.add('grant_type=client_credentials'); 
    with IdHTTP do begin 
    IOHandler := IdSSLIOHandlerSocket1; 
    Request.ContentType := 'application/x-www-form-urlencoded'; 
    end; 
    showmessage(idhttp.Post('https://api.revcontent.io/oauth/token',params)); 
end; 

Mais chaque fois que je l'exécute, je reçois une erreur 400 Bad Request. Qu'est-ce que je fais mal?

+2

Utilisez 'client_id', pas' clientid'. N'utilisez pas SSL3, ce site prend en charge TLS1. Ne définissez pas ContentType. Utilisez try/except autour de 'Post' pour attraper l'exception et obtenir le message d'erreur complet' (E comme EIdHTTPProtocolException) .ErrorMessage' – smooty86

+0

yep .... Je viens de me découvrir après l'avoir exécuté dans Fiddler que je n'utilisais pas client_id .. une réponse et je vais vous donner crédit. –

Répondre

1

Utilisez client_id, et non clientid.
N'utilisez pas SSL3, ce site prend en charge TLS1.
Ne définissez pas ContentType.
Utilisez try/excepté autour de Post pour intercepter l'exception et recevoir le message d'erreur complet