|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
GoogleAPI Fusion Tables не отправляется запрос методом POST
Здрасте, всем!
Пишу программу, которая авторизуется и создает fusion tables, на сервисе google, с помощью sql запроса. Работа осуществляется через Synapse. Проблема возникает при отправке самого запроса на создание этой пресловутой таблицы, в ответе от сервера сказано, что отправленный sql запрос пустой: Код 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; Видимо я, что-то не так делаю и не знаю как правильно это сделать. Пользуюсь synapse'сом только неделю. Подскажите где ошибка? Последний раз редактировалось TolAlik, 07.03.2012 в 02:28. Причина: Найдено решение |
#2
|
||||
|
||||
Еще раз здратсте!
Покумекав еще несколько дней, подзубрив английский и наконец-то правильно прочитав документацию, нашел решение Думаю, данный пример многим будет интересен, если кто захочет поработать с сервисом google геокодирование. Надеюсь, из документации вы поймете, в чем связь между Fusion Tables и геокодирование в google. Вот сам код: Код:
procedure TForm1.Button2Click(Sender: TObject); var sql, URL,s:string; AuthStr: string; begin with THTTPSend.Create do try sql:='CREATE TABLE SaleInformation (customer:NUMBER)'; //Здесь формируется sql запрос на создание таблицы AuthStr:='Authorization: GoogleLogin auth=' + GetAuthIdHTTP(Edit1.Text, Edit2.Text); //Здесь получаем ключ авторизации Headers.Add('GData-Version: 3.0'); Headers.Add(AuthStr); //Записываем ключ авторизации в Headers MimeType:='application/x-www-form-urlencoded'; //из документации Protocol:='1.1'; //из документации AddPortNumberToHost:=False; //из документации URL:='https://fusiontables.googleusercontent.com/fusiontables/api/query?encid=true'; //адрес для отправки запроса (из документации) Document.Clear; WriteStrToStream(Document, 'sql='+EncodeURL(sql)); //Записывает тело потока наш запрос if HTTPMethod('POST',URL) then //Отправка данных методом POST Memo1.Lines.LoadFromStream(Document); //Вывели ответ сервера finally Free; end; end; |