私は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;
何かヒントはありがたいです。
@bummiのヒントをありがとう。ログを見た後、私はClient.HTTPOptions:= [hoKeepOrigProtocol]を設定しない限り、TIdHttpが不正なプロトコルバージョンを送信するのを見た。 – stanleyxu2005