मैं कुछ वेबसाइट जांच करने के लिए idhttp (इंडी) का उपयोग कर रहा हूं। मैं बस इतना करना चाहता हूं कि मेरा अनुरोध भेजने के बाद सर्वर से प्रतिक्रिया कोड की जांच करें, मैं वास्तव में सर्वर से HTML आउटपुट प्राप्त नहीं करना चाहता क्योंकि मैं केवल 200 ओके कोड के लिए निगरानी कर रहा हूं, कोई भी अन्य कोड का अर्थ है कि कुछ रूपों का मुद्दा है।आईडीएचटीपी बस प्रतिक्रिया कोड प्राप्त करें
मैंने idhttp सहायता दस्तावेज़ों को देखा है और एकमात्र तरीका जिसे मैं संभवतः देख सकता हूं, यह कोड को MemoryStream
पर असाइन करना होगा और फिर इसे सीधे साफ़ करें, हालांकि यह बहुत कुशल नहीं है और स्मृति का उपयोग करता है इसकी आवश्यकता नहीं है। क्या किसी साइट को कॉल करने और प्रतिक्रिया प्राप्त करने का कोई तरीका है लेकिन HTML को वापस भेज दिया गया है जो अधिक कुशल है और स्मृति को बर्बाद नहीं करता है?
वर्तमान में कोड इस तरह कुछ दिखाई देगा। हालांकि यह सिर्फ नमूना कोड है जिसे मैंने अभी तक परीक्षण नहीं किया है, मैं बस यह समझाने के लिए इसका उपयोग कर रहा हूं कि मैं क्या करने की कोशिश कर रहा हूं।
Procedure Button1Click(Sender: TObject);
var
http : TIdHttp;
s : TStream;
url : string;
code : integer;
begin
s := TStream.Create();
http := Tidhttp.create();
url := 'http://www.WEBSITE.com';
try
http.get(url,s);
code := http.ResponseCode;
ShowMessage(IntToStr(code));
finally
s.Free();
http.Free();
end;
मैं अभी इस कोड के साथ खेल रहा हूं। यह सब एक धागे के अंदर चलाता है, हालांकि यदि 200 कोड उत्तर के अलावा कुछ भी है उदा। 404, 302 आदि या सॉकेट त्रुटि यह थ्रेड को बाहर निकलने का कारण बनती है। – jskrwyk
कोई भी प्रतिक्रिया कोड जो सफल पुनर्प्राप्ति का संकेत नहीं देता है, अपवाद उठाएगा। यदि आपका धागा अपवादों को संभालने में सक्षम नहीं है, या कम से कम विशेष अपवाद प्रकार को संभालने में सक्षम नहीं है, तो हां, धागा बाहर निकल जाएगा (और 'TThread.FatalException' प्रॉपर्टी सेट की जाएगी)। मेरे उदाहरण में, यह केवल 'EIdHTTPProtocolException' अपवादों को संभालने वाला है। यदि आवश्यक हो तो अन्य प्रकार के अपवादों को संभालने के लिए अपने थ्रेड कोड का विस्तार करें। –
@RemyLebeau क्या होगा यदि हमें 'जारी रखें' '100' प्रतिक्रिया प्राप्त होती है? हमें फिर कोशिश करने की ज़रूरत होगी, है ना? – PSyLoCKe