1

这是我上一个问题的继续:

Delphi、WebBrowser、Google 登录、FusionTable

但是使用 WinHTTP 的测试也失败了,因为基于 TWebBrowser 的测试......

这是一个如你所愿的问题...... :-)

我有一张现在是 PUBLIC 的桌子,但是当我们购买非免费帐户时,它将更改为私人帐户。

我创建了一个简单的 WinHTTP 测试,但这也失败了。

我可以登录,我得到了“Auth”标签,但下一个“私人”请求返回 401 错误。

procedure TForm1.BitBtn1Click(Sender: TObject);
var
    WinHttpReq, temp : variant;
    URL, s : String;
    params : TStringList;
    authtoken, query, posts : string;
begin
    URL := 'https://www.google.com/accounts/ClientLogin';

    WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');

    params := TStringList.Create;
    try
        params.Values['accountType'] := 'GOOGLE';
        params.Values['Email'] := csEmail;
        params.Values['Passwd'] := csPwd;
        params.Values['service'] := 'fusiontables';
        params.Values['source'] := csSource;
        posts := EncodeParamsToURL(params);
    finally
        params.Free;
    end;

    URL := URL + '?' + posts;

    WinHttpReq.Open('POST', URL, false);
    WinHttpReq.Send();
    s := WinHttpReq.ResponseText;

    Memo1.Lines.Text := s;

    params := TStringList.Create;
    try
        params.Text := s;
        authtoken := params.Values['Auth'];
        Edit1.Text := authtoken;
    finally
        params.Free;
    end;

    //query := URLEncode('SHOW TABLES');
    query := URLEncode('select * from 1236965');

    url := 'http://www.google.com/fusiontables/api/query?sql=' + query;

    WinHttpReq.Open('POST', URL, false);
    WinHttpReq.setRequestHeader('Authorization', 'GoogleLogin auth="' + authToken + '"');
    WinHttpReq.Send();
    s := WinHttpReq.ResponseText;

    Memo1.Lines.Text := s;

end;

当我进行“选择”时,我得到了行。但是当我想查看表名时,出现 401 错误...

我不确定是什么导致了这个错误。

a. The free account don't have enough rights to access it privately
b. I set the header wrong
c. I set the csSource wrong (I set it "MyCompanyName-Test-1.0")
d. Other thing I don't know what...

Can anybody help me how to login and access the data successfully?

4

1 回答 1

1

Change your method to GET:

WinHttpReq.Open('GET', URL, false);

And remove the " around your auth token:

WinHttpReq.setRequestHeader('Authorization', 'GoogleLogin auth=' + authToken);

The first change is to comply with the documentation (although POST also works). The second change fixes the error.

于 2011-08-09T10:01:24.437 回答