2012-06-13 54 views
8

Tôi đang sử dụng Delphi XE2 và Indy 10.5.8.0. Tôi có một ví dụ của TIdHttp và tôi cần phải thêm một tiêu đề tùy chỉnh cho yêu cầu. Giá trị tiêu đề có dấu phẩy trong đó để nó được phân tích tự động thành nhiều tiêu đề. Tôi không muốn nó làm vậy. Tôi cần giá trị tiêu đề cho tiêu đề tùy chỉnh của mình để vẫn là một chuỗi và không được phân tách dựa trên dấu phân tách dấu phẩy.Thêm tiêu đề tùy chỉnh vào yêu cầu TIdHttp, giá trị tiêu đề có dấu phẩy

Tôi đã thử đặt IdHttp1.Request.CustomHeaders.Delimiter := ';' không thành công. Có cách nào để đảm bảo tiêu đề không bị chia nhỏ không?

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 bạn có thể làm: IdHttp1.Request.CustomHeaders.Value ['Authorization']: = HeaderStr; và cứ thế cho tất cả "tiêu đề tùy chỉnh", đừng quên SSL! – ComputerSaysNo

+0

Cho dù bạn sử dụng 'AddValue()' hoặc 'Value []', chuỗi cuối cùng kết thúc bằng 'TIdHeaderList.FoldAndInsert()', là nơi chuỗi được phân tích cú pháp, chia thành nhiều phần và thêm vào danh sách. –

Trả lời

4

Tôi không thể tạo lại sự cố này bằng ảnh chụp nhanh Indy 10.5.8 SVN mới nhất. Chuỗi bạn đã hiển thị được chỉ định là một dòng duy nhất cho tôi.

Với điều đó, theo mặc định, thuộc tính TIdHeaderList.FoldLines được đặt thành True và các dòng được xếp vào khoảng trắng và ký tự dấu phẩy để giải thích lý do chuỗi của bạn bị phân tách. Gần như tôi có thể nói, không có bất kỳ thay đổi logic nào được thực hiện cho thuật toán gấp giữa phiên bản Indy của bạn và phiên bản mới nhất trong SVN.

+0

Đặt FoldLines thành False thực hiện thủ thuật. Các tài liệu Indy trong Delphi nói FoldLength là những gì buộc các giá trị tiêu đề để bọc (không khoảng trắng hoặc dấu phẩy) vì vậy tôi thậm chí không bận tâm với gấp. Một thủ thuật tuyệt vời, nhờ Remy! –

+0

Giá trị mặc định của thuộc tính 'TIdHeaderList.FoldLength' là 78. Độ dài của tiêu đề cuối cùng mà bạn thêm là 75, vì vậy nó không nên được xếp thành nhiều dòng ngay cả với thuộc tính' TIdHeaderList.FoldLines' được đặt thành True. Khi tôi rút ngắn thuộc tính 'TIdHeaderList.FoldLength' thành 74 hoặc ít hơn, tôi thấy dòng của bạn được gấp lại như mong đợi. Vì vậy, trong trường hợp của bạn, bạn có thể thay đổi thiết lập 'FoldLength' thành giá trị cao hơn 75 (nếu nó chưa được), hoặc thành' MaxInt' để vô hiệu hóa việc gập một cách khác. –

+0

Khi một dòng đang được gấp lại, nó được gấp lại ở khoảng trắng/dấu phẩy gần nhất với vị trí 'FoldLength' của dòng. –

Các vấn đề liên quan