2014-04-25 35 views
2

我想知道如果我可以有onCommandGet事件,我可以將客戶端請求重定向到另一個主機/端口,獲取TIdHTTP(客戶端)所需的信息並通過AResponseInfo發送回客戶端?是否有可能在TIdHTTPServer onCommandGet事件中使用TIdHTTP(客戶端)重定向請求並返回響應?

它shoold是這樣的:

procedure HTTPServerCommandGet(AContext: TIdContext; 
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); 
var 
client : TIdHTTP; 
begin 
    client := TIdHTTP.Create(); 
    try 
    client.Request := ARequestInfo; // or somehow put the ARequestInfo in the client 
    ... // in here I don't know how to make the GET, POST, HEAD or other 
    ... // (if possible) request to 'some_host:some_port' 
    AResponseInfo := client.Response; // or somehow put the client Response in AResponseInfo 
    finally 
    FreeAndNil(client); 
    end; 


end; 
+2

形式上你應該返回'AResponseInfo.Redirect('redir_host:port');'並讓客戶端自己處理重定向。但我覺得你的問題的原因可能是你想在服務器上做一些「隱藏」到客戶端的東西,在那裏正式的重定向不是一種選擇。只是爲了讓你知道... – TLama

+0

@TLama是的 - 你是對的 - 而其中一個「隱藏」的東西是實際的主機:端口從我將收集客戶需要的信息並通過它發回給他的信息AResponseInfo - 讓他覺得他從他剛輸入的網址得到它 –

回答

2

沒有本地的解決方案做你所要求的。你將不得不手動實現它。根據需要將ARequestInfo屬性中的相關值複製到TIdHTTP.Request,然後根據需要調用TIdHTTP.Get()TIdHTTP.Post()等,然後根據需要將TIdHTTP.Response中的相關值複製到AResponseInfo中。

+0

這幾乎是我想要做的 - 我只是不知道我需要使用/設置哪個ARequestInfo和AResponseInfo屬性,以使事情工作如果有中間沒有任何TIdHTTP? –

相關問題