سؤال

اعتدت على استخدام إندي مرة أخرى في دلفي 6 أيام و أنا ألعب مع إندي 10 الآن.ما أريد القيام به هو بسيط للغاية ، ولكن أنا لا أرى طريقة بسيطة للقيام بذلك ، لذلك يجب أن يكون في عداد المفقودين شيء.

ما أريد القيام به هو شيء من هذا القبيل:

هنا هو رمز الفعلي أنا باستخدام:

procedure TForm1.btnGetURLClick(Sender: TObject);
begin
  moHeader.Lines.Clear;
  moBody.Lines.Clear;
  try
    moBody.text := IdHttp1.Get(edURL.text);
  finally
  end;
end;   

عند اكتمال الطلب ، http_result يجب أن تحتوي على HTML من عنوان URL المحدد.هذا لا يبدو أن العمل ومع ذلك ، حتى أشعر أنني يجب أن يكون باستخدام IOHandler الممتلكات أو OnWork الحدث من مكون - ومع ذلك الاستخدام لا يبدو واضحا بالنسبة لي و لم أجد أي أمثلة العمل مع جوجل.أنا متأكد من أن هذا هو الشيء الذي تم القيام به من قبل ، لذلك سيكون موضع تقدير أي مساعدة.

معلومات إضافية:في روح من كونها أكثر تحديدا ، أريد أن أعرف:1.أفعل هذا الحق أن تبدأ مع (أو هل فاتني شيء؟).2.إذا كان الأمر كذلك, لماذا قد لا تعمل.3.فمن الممكن دائما أن هناك خلل في تركيبة مترجم/os/إندي أنا باستخدام.(على الرغم من أنه يجب أن يعمل).

أود أن أذكر أنني دائما تحصل على المنبثقة "اتصال مغلقة بأمان".هذا يبدو أن يكون استثناء ، ويمكن أن يكون التدخل على نتيجة الدالة.حاولت فخ هذا مع محاولة...أخيرا, لكنه لا يعمل.ربما لأن إندي اثار الاستثناء في الخلفية بعد الحصول على طريقة تشغيل أعتقد.

وأخيرا ها هو سكرينكست من برنامج يعمل على إزالة أي التباس:http://screencast.com/t/NDMzNTQ5 أتوقع HTML لملء الثانية مذكرة مربع.

هل كانت مفيدة؟

المحلول

وثمة خيار آخر، سيكون لاستخدام المشبك . هذا هو كل ما هو مطلوب لاسترداد صفحة ويب باستخدام هذه المكتبة:

uses
  ...,HTTPSEND;

var
  Result : TStrings;


  if HTTPGetText('http://www.google.com',Result) then
    // do something with result

والمشبك هي مكتبة TCPIP خفيفة الوزن. تم الإبقاء على مكتبة بنشاط والإصدار الحالي يعمل بشكل جيد في دلفي 2009/2010. انها ليست إطارا أساس العنصر، ولذلك فمن السهل جدا للاستخدام مع تقنيات خيوط أخرى ( OmniThreadLibrary AsyncCalls على سبيل المثال).

نصائح أخرى

أعتقد أن لديك TIdHTTP.HandleRedirects تعيين إلى false إذا كنت تحصل على خطأ "HTTP/1.1 302 Found"يمكنك أن تجرب هذا

var
http_result:string;    
Begin
IdHTTP1.HandleRedirects:=True;
http_result := IdHTTP1.Get('http://www.google.com');

End;

لديك لضبط HandleRedirects الملكية إلى true.

وليس هناك حاجة للحصول على نموذج، وذلك باستخدام مكونات GExperts إلى رمز حصلت على هذا:

var
  IdHTTP: TIdHTTP;

IdHTTP := TIdHTTP.Create(Self);
with IdHTTP do
begin
  Name := 'IdHTTP';
  AllowCookies := True;
  HandleRedirects := True;
  HTTPOptions := [hoForceEncodeParams];
end;

وفقط لصق هذا في وحدتك، ينبغي أن يكون كل ما تحتاجه.

وIIRC إذا كانت الموجهات شبكة الإنترنت، تحتاج أيضا إلى تجاوز بعض معالج (onredirect أو نحو ذلك). ولكن هذا هو الحال أيضا في indy9 IIRC.

لقد بقيت هذه المسألة مفتوحة لبعض الوقت، لذلك أنا إغلاقه. كان لي حل لمجرد استخدام المشبك، كما اقترح واحد من الملصقات. وهو يعمل على ويندوز / لينكس / ماك OS مع الحد الأدنى من التعديلات، ويعمل بشكل جيد في المكتبات / المواضيع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top