I’m trying to post to Blogger using idHTTP component, however, I’m getting “HTTP/1.0 400 Bad Request” error.
procedure TForm1.Button1Click(Sender: TObject);
var request,response,req : TStringlist;
auth,blogid : string;
begin
blogid := '00000000000000000000000';
request := TStringList.Create;
response := TStringList.Create;
req := TStringList.Create;
IdHTTP1.Request.Connection := 'Keep-Alive';
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv23;
request.Clear();
request.Values['accountType'] := 'GOOGLE';
request.Values['Email'] := 'xxx@gmail.com';
request.Values['Passwd'] := 'yyy';
request.Values['service'] := 'blogger';
response.Text :=IdHTTP1.Post('https://www.google.com/accounts/ClientLogin',request);
auth := response.Values['Auth']; //working perfectly
req.Clear();
req.Text := Memo2.Lines.Text; //put entry into request var
IdHTTP1.Request.CustomHeaders.Clear();
IdHTTP1.Request.CustomHeaders.Add('GData-Version: 2');
//IdHTTP1.Request.CustomHeaders.Add('Authorization: GoogleLogin auth='+auth);
IdHTTP1.Request.CustomHeaders.Values['Authorization'] := 'GoogleLogin auth = '+auth;
IdHTTP1.Request.ContentType := 'application/atom+xml';
memo1.Text := IdHTTP1.Post('https://www.blogger.com/feeds/' + blogid + '/posts/default', req); // I got "HTTP/1.0 400 Bad Request" error right here.
end;
gor error on
memo1.Text := IdHTTP1.Post('https://www.blogger.com/feeds/' + blogid + '/posts/default', req);
Does anyone know what I’m doing wrong?
Any help is greatly appreciated. Thank you!
You are posting your XML data using a
TStringList. Even though you are not setting theRequest.ContentTypetoapplication/x-www-form-urlencoded, posting aTStringsobject will always encode the data as if you did. That is likely why the server is complaining, because it will not receieve your intended XML correctly. To post XML data, you need to use aTStreaminstead, eg: