尝试从Google Analytics API获取馈送时出现此错误。不过,使用相同的标记,我会从Google日历获取成功的Feed。两者之间的代码除了提供网址之外完全相同。因此,它必须与Google Analytics(分析)为https和Calendar(日历)有关。HTTP/1.1 401令牌无效 - AuthSub令牌有错误的范围
我已经成功创建了一个不安全的长期令牌。同时要求初始令牌范围参数:
scope=http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2F%20https%3A%2F%2Fwww.google.com%2Fanalytics%2Ffeeds
我对长期令牌请求:
GET /accounts/AuthSubSessionToken HTTP/1.1
Authorization: AuthSub token="CP_AgsyLDxDCtpjg-f____8B"
Content-Type: application/x-www-form-urlencoded
Host: www.google.com:443
Accept: text/html, */*
Accept-Encoding: identity
User-Agent: Mozilla/3.0 (compatible; Indy Library)
返回一个长期令牌。使用它的谷歌日历:
GET /calendar/feeds/default/allcalendars/full HTTP/1.1
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Authorization: AuthSub token="CP_AgsyLDxCh2tmj-P____8B"
Host: www.google.com
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Accept-Encoding: identity
User-Agent: Mozilla/3.0 (compatible; Indy Library)
返回临时重定向(302):
HTTP/1.1 302 Moved Temporarily
Expires: Sun, 01 Nov 2009 03:00:01 GMT
Date: Sun, 01 Nov 2009 03:00:01 GMT
Set-Cookie: S=calendar=mta4-_BxxANrylcSnzUatg;Expires=Mon, 01-Nov-2010 03:00:01 GMT
Location: http://www.google.com/calendar/feeds/default/allcalendars/full?gsessionid=mta4-_BxxANrylcSnzUatg
导致一个成功的得到这个:
GET /calendar/feeds/default/allcalendars/full?gsessionid=mta4-_BxxANrylcSnzUatg HTTP/1.1
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Authorization: AuthSub token="CP_AgsyLDxCh2tmj-P____8B"
Host: www.google.com
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Accept-Encoding: identity
User-Agent: Mozilla/3.0 (compatible; Indy Library)
Cookie: S=calendar=mta4-_BxxANrylcSnzUatg
但我得到的错误401试图获取Google Analytics Feed时:
GET /analytics/feeds/accounts/default HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: AuthSub token="CP_AgsyLDxCh2tmj-P____8B"
Host: www.google.com:443
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Accept-Encoding: identity
User-Agent: Mozilla/3.0 (compatible; Indy Library)
我的域名需要有效的SSL证书吗?一直在争取这个星期!
在Apache中使用Indy10和Delphi 2007。
请求提供一些Delphi代码。我在这里提供的是用于GET的代码。我不提供代码来获取令牌,因为我认为它们很好(我可以获取日历提要)。
var
IdHTTP: TIdHTTP;
IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocketOpenSSL;
begin
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;
ProxyParams.BasicAuthentication := False;
Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
Request.ContentType := 'application/x-www-form-urlencoded';
request.host := 'www.google.com/analytics';
request.connection := 'keep-alive';
Request.Accept := 'text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2';
end;
idhttp.Request.CustomHeaders.Add('Authorization: AuthSub token="'+mToken+'" ');
IdHTTP.Get('https://www.google.com/analytics/feeds/accounts/default'); // results in the 401
show是你的一些Delphi代码,尤其是你如何做HTTPS处理 – 2009-11-01 08:08:11
请将用户代理设置为代表* your *程序的字符串。使用通用值可以让您的程序与其他没有专门研究的人混在一起,这可能会导致服务器过滤您的程序,认为这只是另一个DoS攻击。 – 2009-11-01 20:36:23
我尝试将用户代理设置为独特的: 用户代理:测试Google Analytics界面 仍然是同样的问题。 – 2009-11-02 01:18:33