Why if I specify Accept-Encoding: gzip
idHTTP sends Accept-Encoding: deflate, gzip, identity?
Because those are the encodings that Indy natively supports when receiving a response from the server. When you assign a Compressor to TIdHTTP, 'deflate' and 'gzip' are added to the Request.AcceptEncoding if they are not already present, and 'identity' is added to the Request.AcceptEncoding if not blank and 'identity' is not already present. This behavior is by design.
If you don't want this behavior, you will have to unassign the Compressor from TIdHTTP, and then use the Request.CustomHeaders property instead of the Request.AcceptEncodings property to specify your own 'Accept-Encoding' value. But then you will have to manually decompress the response data yourself if it is sent compressed, which means you can't use the overloaded version of TIdHTTP.Post() that returns a String, you will have to use the overloaded version that populates an output TStream instead, and then you can decompress it and decode the resulting bytes to a String.
HTTP.Request.CustomHeaders.AddText(Headers);
That is not the correct way to set the headers you are assigning custom values to. Use the appropriate TIdHTTP.Request properties instead:
//HTTP.Request.Host := Domain; // done automatically by TIdHTTP
HTTP.Request.UserAgent := UserAgent;
HTTP.Request.Accept := Accept;
//HTTP.Request.AcceptEncoding := 'gzip'; // let TIdHTTP.Compressor handle this
HTTP.Request.Connection := 'keep-alive';
HTTP.Request.ContentType := 'application/x-www-form-urlencoded';
HTTP.Request.CustomHeaders.Values['Cookie'] := Cookie; // consider letting TIdCookieManager handle this instead
Also, since you are posting an 'application/x-www-form-urlencoded' request, your PostStream should be a TStringList, let TIdHTTP.Post() format its own internal stream, and set the Request.ContentType for you.