2012-06-13 11 views
8

Sto usando Delphi XE2 e Indy 10.5.8.0. Ho un'istanza di TIdHttp e ho bisogno di aggiungere un'intestazione personalizzata alla richiesta. Il valore dell'intestazione contiene virgole, quindi viene analizzato automaticamente in più intestazioni. Non voglio farlo. Ho bisogno che il valore dell'intestazione della mia intestazione personalizzata sia ancora una stringa e non divida in base a un delimitatore di virgola.Aggiunta intestazione personalizzata alla richiesta TIdHttp, il valore dell'intestazione ha virgole

Ho provato a impostare IdHttp1.Request.CustomHeaders.Delimiter := ';' senza successo. C'è un modo per assicurarmi che l'intestazione non venga divisa?

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 si può fare: IdHttp1.Request.CustomHeaders.Value ['Autorizzazione']: = HeaderStr; e così via per tutte le "intestazioni personalizzate", non dimenticare di SSL! – ComputerSaysNo

+0

Indipendentemente dal fatto che si usi 'AddValue()' o 'Value []', la stringa finisce in 'TIdHeaderList.FoldAndInsert()', che è dove la stringa viene analizzata, divisa in pezzi e aggiunta alla lista. –

risposta

4

Non riesco a riprodurre questo problema utilizzando l'ultima istantanea SVN di Indy 10.5.8. La stringa che hai mostrato viene assegnata come singola linea per me.

Detto questo, per impostazione predefinita la proprietà TIdHeaderList.FoldLines è impostata su True e le righe vengono piegate su spazi bianchi e virgola, in modo da spiegare perché la stringa viene suddivisa. Per quanto posso dire, non sono state apportate modifiche logiche all'algoritmo di piegatura tra la tua versione di Indy e l'ultima versione in SVN.

+0

L'impostazione di FoldLines su False ha funzionato. La documentazione di Indy in Delphi dice che FoldLength è ciò che forza il valore dell'header da avvolgere (non spazi bianchi o virgole) quindi non mi ero nemmeno preoccupato di piegare. Un grande trucco non documentato, grazie Remy! –

+0

Il valore predefinito della proprietà 'TIdHeaderList.FoldLength' è 78. La lunghezza dell'intestazione finale che si sta aggiungendo è 75, quindi non dovrebbe essere piegata in più righe anche con la proprietà' TIdHeaderList.FoldLines' impostata su True. Quando accorchio la proprietà 'TIdHeaderList.FoldLength' a 74 o meno, vedo che la tua linea viene piegata come previsto. Quindi, nel tuo caso, potresti impostare in modo alterato 'FoldLength' su un valore superiore a 75 (se non lo è già), oa' MaxInt' per disabilitare la piegatura in un modo diverso. –

+0

Quando una linea viene piegata, viene piegata al carattere spazio/virgola più vicino alla posizione 'FoldLength' della linea. –