PDA

Ver la Versión Completa : Problema al enviar en POST con Google Data API Delphi


elcharlie
21-05-2013, 12:33:10
Buenas gente:
Estoy haciendo una mini aplicacion que sincronice con gdata desde Delphi, y de momento me loqueo, y retorno información con get, pero a la hora de usar el comando POST, y enviarle una estructura para que cree un registro, siempre me da error, y no encuentro solución, he probado de todo, y por ultimo, lo que he hecho ha sido intentar dar de alta un grupo de contactos con el ejemplo de google pero nada, os pongo el ejemplo por si alguien me puede echar una mano.
Gracia de antemano:

elcharlie
21-05-2013, 12:40:55
No se que ha Pasado os Pongo el post Original:
Buenas gente:
Estoy haciendo una mini aplicacion que sincronice con gdata desde Delphi, y de momento me loqueo, y retorno informacion con get, pero a la hora de usar el comando POST, y enviarle una estructura para que cree un registro, siempre me da error, y no encuentro solucion, he probado de todo, y por ultimo, lo que he hecho ha sido intentar dar de alta un grupo de contactos con el ejemplo de google pero nada, os pongo el ejemplo por si alguien me puede echar una mano.
Gracia de antemano:

function CreateGroup(Titulo: PAnsiChar): PChar; stdcall;
var
XMLDoc: TNativeXml;
ListaNodos: TXmlNodeList;
Node: TXmlNode;
NodeExt: TXmlNode;
createRequest: string;

Send: Thttpsend;
RetornoString: AnsiString;
I: Integer;
lPostData: TStringList;
begin
Result := PChar('-1');
if ((AuthID <> '') and (Titulo <> '')) then
begin
// estructura en https://developers.google.com/google-apps/contacts/v3/#creating_contact_groups
// Tambien lo he probado en String en vez de un XML sin exito
XMLDoc := TNativeXml.Create;
XMLDoc.CreateName('atom:entry');
XMLDoc.Root.WriteAttributeString('xmlns:gd',
'http://schemas.google.com/g/2005');
XMLDoc.Root.WriteAttributeString('xmlns:atom',
'http://www.w3.org/2005/Atom');
Node := XMLDoc.Root.NodeNew('atom:category');
Node.WriteAttributeString('scheme',
'http://schemas.google.com/g/2005#kind');
Node.WriteAttributeString('term',
'http://schemas.google.com/contact/2008#group');
Node := XMLDoc.Root.NodeNew('atom:title');
Node.WriteAttributeString('type', 'text');
Node.ValueAsUnicodeString := String(Titulo);
NodeExt := XMLDoc.Root.NodeNew('gd:extendedProperty');
NodeExt.WriteAttributeString('name', 'more info about the group');
Node := NodeExt.NodeNew('info');
Node.ValueAsUnicodeString := 'Nice people.';
XMLDoc.SaveToFile('C:\CarlosP.xml');

Send := Thttpsend.Create;
Send.MimeType := 'application/atom+xml';
Send.Headers.Clear;
Send.Headers.Add('GData-Version: 3.0');
Send.Headers.Add('Authorization: GoogleLogin auth=' + AuthID); //Es la Autentificacion dada al loguearme por google

XMLDoc.SaveToStream(Send.Document);


try
if (Send.HTTPMethod('POST','https://www.google.com/m8/feeds/groups/default/full')) then
begin
Application.MessageBox(PChar(inttostr(Send.ResultCode)), '', 0);
end;
Application.MessageBox(PChar(inttostr(Send.ResultCode)), '', 0);
except
on e: Exception do
Application.MessageBox(PChar(e.ToString), '', 0); // Siempre Entra Aqui codigo 500
end;
end;


end;

Chris
21-05-2013, 17:15:52
¿Cuál es el error que te está dando el código anterior?

elcharlie
21-05-2013, 18:45:11
Ejecutar, ejecuta bien, pero siempre que intento enviar algo me devuelve Bad request 401, o desde la excepcion me retorna 500.
es al hacer esto:
try
if (Send.HTTPMethod('POST','https://www.google.com/m8/feeds/groups/default/full')) then
begin
Application.MessageBox(PChar(inttostr(Send.ResultCode)), '', 0);
end;
Application.MessageBox(PChar(inttostr(Send.ResultCode)), '', 0);
except
on e: Exception do
Application.MessageBox(PChar(e.ToString), '', 0); // Siempre Entra Aqui codigo 500
end;

Es como si la sintaxis del fichero que intento enviar estuviera mal, pero he probado de diferentes maneras y siempre me devuelve lo mismo, vamos que no puedo enviarle información, y la verdad me tiene un poco desesperado, yo que había empezado con los contactos porque a priori era mas sencillo, y ya ves tu.

Chris
21-05-2013, 20:54:17
Cómo estás haciendo la autenticación con Google? Estás usando OAuth2?

elcharlie
22-05-2013, 13:50:12
Pues no te se decir, le envio el accounType, el EMail del usuario, el Password, el service y me devuelve la Autentificacion. Para loguearme uso las InetSuite, y estaba probando para enviar el XMl con ellas y no he podido, por eso el proceso de arriba uso Synapse.

elcharlie
23-05-2013, 12:44:02
A Nadie se lo ocurre algo? Me podeis echar una mano? estoy super atascado

Chris
24-05-2013, 04:23:59
A Nadie se lo ocurre algo? Me podeis echar una mano? estoy super atascado

Hola Charlie!

Tengo mucha ganas de ayudarte a resolver tu problema. Pero por cuestiones de tiempo en mi trabajo no he podido ni abrir Delphi.

Saludos!

elcharlie
24-05-2013, 12:32:14
Hola Charlie!

Tengo mucha ganas de ayudarte a resolver tu problema. Pero por cuestiones de tiempo en mi trabajo no he podido ni abrir Delphi.

Saludos!


Muchas gracias Chris!!, Pero creo que ya lo he conseguido, ya te contare! Gracias de todas formas, un saludo.