Adding custom header to TIdHttp request, header value has commas

27,698

I am not able to reproduce this issue using the latest Indy 10.5.8 SVN snapshot. The string you have shown gets assigned as a single line for me.

With that said, by default the TIdHeaderList.FoldLines property is set to True, and lines get folded on whitespace and comma characters, so that would explain why your string is getting split. Near as I can tell, there have not been any logic changes made to the folding algorithm between your version of Indy and the latest version in SVN.

Share:
27,698
Sam M
Author by

Sam M

Software developer in Business Intelligence.

Updated on June 14, 2020

Comments

  • Sam M
    Sam M almost 4 years

    I'm using Delphi XE2 and Indy 10.5.8.0. I have an instance of TIdHttp and I need to add a custom header to the request. The header value has commas in it so it's getting parsed automatically into multiple headers. I don't want it to do that. I need the header value for my custom header to still be one string and not split based on a comma delimiter.

    I have tried setting IdHttp1.Request.CustomHeaders.Delimiter := ';' with no success. Is there a way to make sure the header doesn't get split up?

    procedure SendRequest;
    const HeaderStr = 'URL-Encoded-API-Key VQ0_RV,ntmcOg/G3oA==,2012-06-13 16:25:19';
    begin
      IdHttp1.Request.CustomHeaders.AddValue('Authorization', HeaderStr);
      IdHttp1.Get(URL);
    end;
    
  • Sam M
    Sam M almost 12 years
    Setting FoldLines to False did the trick. The Indy documentation in Delphi says FoldLength is what forces the header value to wrap (not whitespace or commas) so I hadn't even bothered with folding. A great undocumented trick, thanks Remy!
  • Remy Lebeau
    Remy Lebeau almost 12 years
    The default value of the TIdHeaderList.FoldLength property is 78. The length of the final header you are adding is 75, so it should not be getting folded into multiple lines even with the TIdHeaderList.FoldLines property set to True. When I shorten the TIdHeaderList.FoldLength property to 74 or less, I see your line get folded as expected. So in your case, you could alterantively set the FoldLength to a higher value than 75 (if it is not already), or to MaxInt to disable folding a different way.
  • Remy Lebeau
    Remy Lebeau almost 12 years
    When a line is being folded, it gets folded at the whitespace/comma character that is closest to the FoldLength position of the line.
  • Remy Lebeau
    Remy Lebeau about 2 years
    "The default value of the TIdHeaderList.FoldLength property is 78" - FYI, since Sept 2013, Indy now sets the default FoldLength to MaxInt in TIdHTTP, thus effectively disabling folding.