我正在尝试使用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
我替换了clientID
和clientSecret
。
这是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
答案 0 :(得分:1)
我解决了!
Indy就是问题所在。
我使用了synapse 4.0组件,并在10分钟内完成了工作。
那一天半我永远不会回来。谢谢Indy :(
答案 1 :(得分:0)
省去一些头痛。获取用于Delphi的Clever Internet Suite。因为,该死的开发人员不了解SSL HTTP客户端是这样的基本要求。他们只是继续提议HTTP客户端。忘记印地和突触。我在哪儿都不隶属于CIS,但我的收入只有2美分。可与我的XE5完美配合。