2012-12-23 36 views
6

私はdelphiとpythonを使って同じコードを(フォームを投稿するために)実装しました。 Pythonコードは完全に動作しますが、Delphiコードは失敗します。 Pythonでは、実際にどのコンテンツがサーバーに送信されたのかを確認するために、単にhttplib2.debuglevel=4と書くことができます。しかし、私はどのようにデルファイのコンテンツを印刷するか分かりません。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のヒントをありがとう。ログを見た後、私はClient.HTTPOptions:= [hoKeepOrigProtocol]を設定しない限り、TIdHttpが不正なプロトコルバージョンを送信するのを見た。 – stanleyxu2005

答えて

4

あなたはIdHttpのインターセプトとしてTIdLogDebugを使用することができます。
イベントOnSendおよびOnReceiveは、必要な情報を配列またはTBytesで配信します。

+4

'TIdLogDebug'はそのデータをデバッガのイベントログに直接出力します。独自のコードでデータを取得する場合は、代わりに 'TIdLogEvent'を使用してください。 'OnSent'イベントと' OnReceived'イベントはデータを 'TBytes'値ではなく' String'値として提供します(あなたは 'TIdLogBase'の下位層' Send() 'と' Receive() 'メソッドを考えています) 。 –

関連する問題