2010-11-19 13 views
15

डेल्फी में HTTPS पोस्ट अनुरोध करने का सबसे आसान तरीका क्या है? मुझे HTTP POST अनुरोध करने में समस्या नहीं है, लेकिन मैं SSL का उपयोग करके इसे कैसे कर सकता हूं? मैंने चारों ओर गुमराह किया है और कुछ भी नहीं मिला है जो इसे अच्छी तरह से समझाता है।डेल्फी में एक HTTPS पोस्ट अनुरोध कैसे करें?

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'. 

मुझे लगता है कि समझ में नहीं आता

यहाँ कोड मैंने कोशिश की है। मैंने पैरामीटर भेजे, हालांकि त्रुटियां लगता है जैसे मैं एक फाइल भेजता।

इसके अलावा मैंने libeay32.dll और ssleay32.dll को my myroroject.exe फ़ोल्डर में शामिल किया है।

+0

क्या आपको कभी इसके लिए कोई फिक्स मिल गया है? –

उत्तर

3

आपने अपना डेल्फी संस्करण या इंडी संस्करण निर्दिष्ट नहीं किया है, लेकिन मुझे डेल्फी 200 9 और एचटीटीपीएस के साथ बंडल इंडी के साथ कुछ समस्याएं थीं, और जब मुझे indy svn से नवीनतम स्रोत मिला, तो समस्या हल हो गई।

0

यदि आप इंडी के अलावा कुछ और करना चाहते हैं, तो आप WinInet आधारित कोड की तलाश कर सकते हैं, वहां बहुत सारे ऑनलाइन उपलब्ध हैं। यहाँ एक सरल है: http://www.explainth.at/en/delphi/winwrap.shtml

यहाँ एक बड़े वाणिज्यिक पैकेज से एक उदाहरण है: http://www.clevercomponents.com/articles/article009/httppost.asp

या, बस का उपयोग क्या StackOverflow पर है: How to send a HTTP POST Request in Delphi using WinInet api

1

एक अन्य वैकल्पिक इंडी को Synapse है।

इस वर्ग पुस्तकालय पद का पूरा नियंत्रण प्रदान करता है, लेकिन यह भी रूप में अच्छी तरह एक साधारण एक लाइनर पोस्ट विधि प्रदान करता है:

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; 

अंत;

संबंधित मुद्दे