2010-11-19 84 views
15

DelphiでHTTPS POSTリクエストを行う最も簡単な方法は何ですか?私はHTTP POSTリクエストの作成に問題はありませんが、SSLを使ってどうすればいいですか?私は周りを探索し、十分にこれを説明する何も見つかりませんでした。ここでDelphiでHTTPS POSTリクエストを作成するには?

は、私が試したコードは次のとおりです。

procedure TForm1.FormCreate(Sender: TObject); 
var 
    responseXML:TMemoryStream; 
    responseFromServer:string; 
begin 
    responseXML := TMemoryStream.Create; 
    IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create(self); 
    with idSSLIOHandlerSocketOpenSSL1 do 
    begin 
     SSLOptions.Method := sslvSSLv2; 
     SSLOptions.Mode := sslmUnassigned; 
     SSLOptions.VerifyMode := []; 
     SSLOptions.VerifyDepth := 0; 
     host := ''; 
    end; 

    IdHTTP1 := TIdHTTP.Create(Self); 
    with IdHTTP1 do 
    begin 
     IOHandler := IdSSLIOHandlerSocketOpenSSL1; 
     AllowCookies := True; 
     ProxyParams.BasicAuthentication := False; 
     ProxyParams.ProxyPort := 0; 
     Request.ContentLength := -1; 
     Request.ContentRangeEnd := 0; 
     Request.ContentRangeStart := 0; 
     Request.Accept := 'text/html, */*'; 
     Request.BasicAuthentication := False; 
     Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)'; 
     HTTPOptions := [hoForceEncodeParams]; 
    end; 
    responsefromserver := IdHTTP1.Post('https://.../','name1=value1&name2=value2&....'); 
end; 

私はそれを実行しようとすると、私は次のエラーを取得する:

Project myProject.exe raised exception class EFOpenError with message 'Cannot open file "C:\...\Projects\Debug\Win32\name1=value1name2=value2 The system cannot find the file specified'. 

私はそれを理解していません。私はパラメータを送ったが、エラーは私がファイルを送ったように聞こえる。

はまた、私は私のmyProject.exeフォルダ内libeay32.dllとssleay32.dllをが含まれています。

+0

あなたがこのための修正を見つけましたか? –

答えて

3

あなたはDelphiのバージョンやインディーズバージョンを指定していませんでしたが、Delphi 2009とHTTPSのバンドルされたIndyにはいくつか問題がありました。最新のソースをindy svnから取得しました。あなたはインディ以外のものを試してみたかった場合

1

インディへの​​もう一つの選択肢はSynapseあるhttp://www.explainth.at/en/delphi/winwrap.shtml

ここで大きな商業用パッケージから例です。

このクラスライブラリは、ポストの完全な制御を提供していますが、また、同様に、単純な1ライナーPOSTメソッドを提供しています:

function HttpPostURL(const URL, URLData: string; const Data: TStream): Boolean; 
+0

HttpPostURL関数はhttpsをサポートしていますか? – Ampere

1

http://chee-yang.blogspot.com/2008/03/using-indy-https-client-to-consume.html

var S: TStringList; 
    M: TStream; 
begin 
S := TStringList.Create; 
M := TMemoryStream.Create; 
try 
    S.Values['Email'] := 'your google account'; 
    S.Values['Passwd'] := 'your password'; 
    S.Values['source'] := 'estream-sqloffice-1.1.1.1'; 
    S.Values['service'] := 'cl'; 

    IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1; 
    IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded'; 
    IdHTTP1.Post('https://www.google.com/accounts/ClientLogin', S, M); 
    Memo1.Lines.Add(Format('Response Code: %d', [IdHTTP1.ResponseCode])); 
    Memo1.Lines.Add(Format('Response Text: %s', [IdHTTP1.ResponseText])); 

    M.Position := 0; 
    S.LoadFromStream(M); 
    Memo1.Lines.AddStrings(S); 
finally 
    S.Free; 
    M.Free; 
end; 

終了。

関連する問題