1

これは私の前の質問の続きです:

Delphi、WebBrowser、Google Login、FusionTable

しかし、WinHTTPを使用したテストもTWebBrowserベースのテストとして失敗しました...

そして、これはあなたが望むように1つの質問です... :-)

NOW PUBLICとは1つのテーブルがありますが、非無料アカウントを購入すると、プライベートタイプに変更されます。

簡単なWinHTTPテストを作成しましたが、これも失敗しました。

ログインできます。「Auth」タグを取得しましたが、次の「private」リクエストで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。無料アカウントには、個人的にアクセスするための十分な権限がありません
。ヘッダーを間違って設定しました
c。csSourceを間違って設定しました(「MyCompanyName-Test-1.0」に設定しました)
。d。他に何がわからないのか...

誰かがログインしてデータに正常にアクセスする方法を教えてもらえますか?

4

1 に答える 1

1

メソッドをGETに変更します。

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

そして、認証トークンの周りの「」を削除します。

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

最初の変更は、ドキュメントに準拠することです(ただし、POSTも機能します)。2番目の変更により、エラーが修正されます。

于 2011-08-09T10:01:24.437 に答える