2012-12-23 13 views
6

'un ham isteği ve yanıt içeriği nasıl izlenir Delphi ve python kullanarak aynı kodu (bir form göndermek için) uygularım. Python kodu mükemmel çalışır, ancak delphi kodu başarısız olur. Python'da, sunucuya hangi içeriğin gönderildiğini görmek için httplib2.debuglevel=4 yazabilirim. ancak içeriği delphi'ye nasıl yazdıracağımı bilmiyorum.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; 

Herhangi bir ipucu kabul edilir.

+0

@bummi'nin ipuçlarını için teşekkürler. Günlüğü gördükten sonra, Client.HTTPOptions: = [hoKeepOrigProtocol] değerini ayarlamadıkça, TIdHttp yanlış bir protokol sürümü göndermiş olduğunu gördüm. – stanleyxu2005

cevap

4

TIdLogDebug'u IdHttp'inizin Intercept'i olarak kullanacaksınız.
Olaylar OnSend ve OnReceive, istenen Bilgileri bir Array veya TBytes'te sunar.

+4

'TIdLogDebug', verilerini doğrudan hata ayıklayıcı olay günlüğüne çıkarır. Verileri kendi kodunuzda yakalamak istiyorsanız, bunun yerine 'TIdLogEvent' kullanın. "OnSent" ve "OnReceived" etkinlikleri, verileri "TBytes" değerleri olarak değil "String" değerleri olarak sağlar (alt katman 'Send()' ve 'Receive()' 'TIdLogBase' yöntemlerini '' düşünürsünüz. . –