使用Indy HTTP的Delphi Google oauth2令牌请求获得400 Bad Request

时间:2015-12-14 16:14:50

标签: delphi google-oauth access-token indy bad-request

我正在尝试使用oauth2从Google请求访问和刷新令牌,我得到的是“HTTP / 1.1 400错误请求”错误。

我在Delphi XE5中使用带有IdSSLIOHandlerSocketOpenSSL处理程序的IdHTTP。我有我的客户端ID,客户端密钥和API密钥。我有授权码。

配置IdHTTP:

AllowCookies = True
HandleRedirects = True
HTTPOptions.hoKeepOrigProtocol = True
HTTPOptions.hoNoProtocolErrorException = True

其他一切都是默认的。

我之前应该做些什么,例如身份验证?

创建Win32应用程序时redirect_uri的相关性是什么?

感谢所有帮助。

这是我的代码:

var  Params: TStringList;
     Resp: TStringStream;
     URI: String;
begin

     Params := TStringList.Create;
     Resp := TStringStream.Create;

     try
        URI := 'https://accounts.google.com/o/oauth2/token';

        Params.Add('client_id=' + clientID);
        Params.Add('client_secret=' + clientSecret);
        Params.Add('code=' + authCode);
        Params.Add('redirect_uri=http://localhost');
        Params.Add('grant_type=authorization_code');

        IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
        IdHTTP.Post(URI, Params, Resp);

        Memo1.Lines.LoadFromStream(Resp);
        Memo1.Lines.Insert(0, IdHTTP.ResponseText);

        finally
        FreeAndNil(Params);
        FreeAndNil(Resp);
        end;

end;

修改

我将Accept标题更改为我在别处找到的设置 我在内容类型中添加了charset=utf-8 我替换了clientIDclientSecret

这是IdHTTP发送的内容:

POST /o/oauth2/token HTTP/1.1<br>
Content-Type: application/x-www-form-urlencoded; charset=utf-8<br>
Content-Length: 240<br>
Host: accounts.google.com<br>
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8<br>
Accept-Encoding: identity<br>
User-Agent: Mozilla/3.0 (compatible; Indy Library)<br>
  

的client_id = clientID的&安培; client_secret = clientSecret&安培;代码= 4%2FtmTyuvpcSMIkoyJcFmicfXQEDpYiw_QilkO2dXv_nUc&安培; REDIRECT_URI = HTTP%3A%2F%2Flocalhost&安培; grant_type = authorization_code

2 个答案:

答案 0 :(得分:1)

我解决了!

Indy就是问题所在。

我使用了synapse 4.0组件,并在10分钟内完成了工作。

那一天半我永远不会回来。谢谢Indy :(

答案 1 :(得分:0)

省去一些头痛。获取用于Delphi的Clever Internet Suite。因为,该死的开发人员不了解SSL HTTP客户端是这样的基本要求。他们只是继续提议HTTP客户端。忘记印地和突触。我在哪儿都不隶属于CIS,但我的收入只有2美分。可与我的XE5完美配合。