Здрасте, всем!
Пишу программу, которая авторизуется и создает fusion tables, на сервисе google, с помощью sql запроса.
Работа осуществляется через Synapse.
Проблема возникает при отправке самого запроса на создание этой пресловутой таблицы, в ответе от сервера сказано, что отправленный sql запрос пустой:
Код HTML:
<HTML>
<HEAD>
<TITLE>The 'sql' parameter cannot be empty</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>The 'sql' parameter cannot be empty</H1>
<H2>Error 400</H2>
</BODY>
</HTML>
Вот сам код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
Data: TStringList;
Response:TMemoryStream;
sql, URL, Params, Log, Psw:string;
http:THTTPSend;
begin
http:=THTTPSend.Create;
try
Response := TMemoryStream.Create;
sql:=EncodeURLElement('sql=CREATE TABLE Animal (animal: STRING, fav_food: STRING, population: NUMBER, location: LOCATION, timestamp: DATETIME)');
URL := 'https://www.google.com/accounts/ClientLogin';
http.Protocol:='1.1';
http.AddPortNumberToHost:=False;
http.MimeType:='application/x-www-form-urlencoded';
Params := 'accountType=HOSTED_OR_GOOGLE&Email=' + EncodeURLElement(Edit1.Text) +
'&Passwd=' + EncodeURLElement(Edit2.Text)+'&service=writely&source=Google Chrome';
// Авторизация
if HttpPostURL(URL, Params, Response) then
begin
try
Data:=TStringList.Create;
Response.Seek(0, soFromBeginning);
Data.LoadFromStream(Response);
Params:=Data.Text;
http.Headers.Add(Trim(Copy(Params, Pos('Auth=', Params) + 5, Length(Params))));
// Отправка sql запроса
http.Headers.Add('GData-Version: 3.0');
url:='https://fusiontables.googleusercontent.com/fusiontables/api/query?encid=true';
WriteStrToStream(HTTP.Document, sql); //задаю sql запрос
if http.HTTPMethod('POST',url) then
Memo1.Lines.LoadFromStream(http.Document);
finally
Data.Free;
Response.Free;
end;
end;
finally
http.Free;
end;
end;
В документации гугл сказано, что sql=<statement> задается в теле POST.
Видимо я, что-то не так делаю и не знаю как правильно это сделать. Пользуюсь synapse'сом только неделю. Подскажите где ошибка?
