2012-06-13 8 views
8

Estoy usando Delphi XE2 e Indy 10.5.8.0. Tengo una instancia de TIdHttp y necesito agregar un encabezado personalizado a la solicitud. El valor del encabezado tiene comas, por lo que se analiza automáticamente en múltiples encabezados. No quiero que haga eso. Necesito el valor del encabezado para que mi encabezado personalizado siga siendo una cadena y no se divida en base a un delimitador de comas.Agregar encabezado personalizado a la solicitud TIdHttp, el valor del encabezado tiene comas

He intentado configurar IdHttp1.Request.CustomHeaders.Delimiter := ';' sin éxito. ¿Hay alguna manera de asegurarse de que el encabezado no se divida?

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; 
+0

IIRC puede hacer: IdHttp1.Request.CustomHeaders.Value ['Authorization']: = HeaderStr; y así sucesivamente para todos los "encabezados personalizados", ¡no se olvide de SSL! – ComputerSaysNo

+0

Ya sea que use 'AddValue()' o 'Value []', la cadena finalmente termina en 'TIdHeaderList.FoldAndInsert()', que es donde se analiza la cadena, se divide en partes y se agrega a la lista. –

Respuesta

4

No puedo reproducir este problema con la última instantánea de Indy 10.5.8 SVN. La cadena que ha mostrado se asigna como una sola línea para mí.

Dicho esto, de forma predeterminada, la propiedad TIdHeaderList.FoldLines se establece en True, y las líneas se doblan en espacios en blanco y caracteres de coma, lo que explicaría por qué su cadena se divide. Cerca de lo que puedo decir, no ha habido cambios lógicos en el algoritmo de plegado entre su versión de Indy y la última versión en SVN.

+0

Establecer FoldLines en False hizo el truco. La documentación de Indy en Delphi dice que FoldLength es lo que fuerza al valor del encabezado a ajustarse (no al espacio en blanco ni a las comas), así que ni siquiera me había molestado en doblar. ¡Un gran truco no documentado, gracias Remy! –

+0

El valor predeterminado de la propiedad 'TIdHeaderList.FoldLength' es 78. La longitud del encabezado final que está agregando es 75, por lo que no se debe doblar en varias líneas, incluso con la propiedad' TIdHeaderList.FoldLines' establecida en True. Cuando acorto la propiedad 'TIdHeaderList.FoldLength' a 74 o menos, veo que su línea se dobla como se esperaba. Entonces, en su caso, podría configurar alternativamente el 'FoldLength' a un valor superior a 75 (si no lo está ya), o a' MaxInt' para desactivar el plegado de una manera diferente. –

+0

Cuando se pliega una línea, se pliega en el carácter de espacio en blanco/coma que está más cerca de la posición 'FoldLength' de la línea. –

Cuestiones relacionadas