Delphi, Winhttp, Google Login, Fusion Tables - PullRequest
       26

Delphi, Winhttp, Google Login, Fusion Tables

1 голос
/ 09 августа 2011

Это продолжение моего предыдущего вопроса:

Delphi, веб-браузер, Google Login, FusionTable

Но тест с WinHTTP также не прошел как тест на основе TWebBrowser ...

И это один вопрос, как вы пожелаете ...: -)

У меня есть одна таблица NOW 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 ...

Я не уверен, что является причиной этой ошибки.

а. У бесплатной учетной записи недостаточно прав для доступа к ней в частном порядке
б. Я неправильно установил заголовок
с. Я неправильно установил csSource (я установил «MyCompanyName-Test-1.0»)
д. Другое дело, я не знаю, что ...

Кто-нибудь может мне помочь, как войти в систему и получить доступ к данным?

1 Ответ

1 голос
/ 09 августа 2011

Измените свой метод на GET:

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

И удалите " вокруг вашего токена авторизации:

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

Первое изменение должно соответствовать документации (хотя POST также работает). Второе изменение исправляет ошибку.

...