2012-12-23 86 views
6

我使用delphi和python實現了相同的代碼(發佈表單)。 Python代碼完美工作,但delphi代碼失敗。在python中,我可以簡單地編寫httplib2.debuglevel=4來查看實際發送到服務器的內容。但我不知道如何在delphi中打印內容。如何跟蹤原始請求和響應內容TIdHttp

def python_request_data(url, cookie, data): 
    httplib2.debuglevel = 4 
    conn = httplib2.Http() 
    conn.follow_all_redirects = True 
    headers = {'Cookie': cookie, 'Content-Type': 'application/x-www-form-urlencoded'} 
    response, contents = conn.request(url, 'POST', data, headers=headers) 

procedure DelphiRequestData(const Url, Cookie, Data: string); 
var 
    Client: TIdHttp; 
    Params: TStringList; 
    Response: string; 
begin 
    Client := TIdHttp.Create(nil); 
    try 
    Client.HTTPOptions := [hoKeepOrigProtocol]; 
    Client.Request.CustomHeaders.AddValue('Cookie', Cookie); 
    Params := TStringList.Create; 
    try 
     Params.QuoteChar := #0; 
     Params.Delimiter := '&'; 
     Params.DelimiterText := Data; 
     Client.Request.ContentType := 'application/x-www-form-urlencoded'; 
     Client.Request.ContentLength := Length(Params.DelimitedText); 
     Response := Client.Post(Url, Params); 
    finally 
     Params.Free; 
    end; 
    finally 
    Client.Free; 
    end; 
end; 

任何提示表示讚賞。

+0

感謝@bummi的提示。看到日誌後,我看到TIdHttp發送的協議版本不正確,除非我設置Client.HTTPOptions:= [hoKeepOrigProtocol]。 – stanleyxu2005

回答

4

您可以使用TIdLogDebug作爲您的IdHttp的攔截。
Events OnSend和OnReceive將在Array或TBytes中傳遞所需的信息。

+4

'TIdLogDebug'將其數據直接輸出到調試器事件日誌。如果你想在自己的代碼中捕獲數據,可以使用'TIdLogEvent'來代替。它的'OnSent'和'OnReceived'事件提供的數據是String值,而不是'TBytes'值(你正在考慮'TIdLogBase'的底層Send()'和Receive()'方法)) 。 –