مشكل في دالة تحديد صلاحية الروابط
#1
السلام عليكم و رحمة الله تعالى و بركاته

احاول العمل على برمجة "برنامج تحميل" بسيط , سيكون السورس ضمن احد المواضيع المقبلة باذن الله
في الوقت الحالي , السورس غير منظم و به العديد من المشاكل و الامور الغير مفهومة (بالنسبة لي)
على العموم ... وجدت دالة في احد المواقع تساعد في الكشف على الروابط
الدالة تستطيع تحديد الروابط الحقيقة من المزيفة لكن بها مشكل و تحتاج لتنقيح
في بعض المرات اضع رابط صحيح و تصنفه على انه غير صالح !
لم افهم الكود طبعا لكن عرفت انه يتم الاستعانة ب HTTP Status Codes
200 --> OK
302 --> Found
عند اضافة رابط اي موقع يعمل الكود بشكل جيد !
الان عند اضافة رابط مباشر مثلا :

كود :
https://vorboss.dl.sourceforge.net/project/newfmd/0.9.158.0/fmd_0.9.158.0.7z
يتم تصنيفه على انه ليس رابط و قد تفقدت ال Response و كانت 302
هل الخلل عندي ام من الكود ؟


PHP كود :
uses wininet;
Function 
CheckUrl(url:string):boolean;
var
hSession, hfile, hRequest: hInternet;
dwindex,dwcodelen :dword;
dwcode:array[1..20] of char;
res : pchar;
begin
if pos('http://',lowercase(url))=0 then
url 
:= 'http://'+url;
Result := false;
hSession := InternetOpen('InetURL:/1.0',
INTERNET_OPEN_TYPE_PRECONFIG,nil, nil, 0);
if 
assigned(hsession) then
begin
hfile 
:= InternetOpenUrl(
hsession,
pchar(url),
nil,
0,
INTERNET_FLAG_RELOAD,
0);
dwIndex := 0;
dwCodeLen := 10;
HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE,
@
dwcode, dwcodeLen, dwIndex);
res := pchar(@dwcode);
result:= (res ='200') or (res ='302');
if 
assigned(hfile) then
InternetCloseHandle
(hfile);
InternetCloseHandle(hsession);
end;
end; 
الرد
#2
و عليكم السلام
الاشكال في ان الكود الذي ارفقت لا يدعم الروابط المؤمنة HTTPS و يرجعها على انها غير صالحة... 

مثلا:
https://www.google.fr يعتبره غير صالح
http://www.google.fr يعتبره صالح
[-] كل من 1 user says قال شكرا ل offset على المشاركة المفيدة
  • Rever7eR
الرد
#3
(24-02-2019, 02:00 PM)offset كتب : و عليكم السلام
الاشكال في ان الكود الذي ارفقت لا يدعم الروابط المؤمنة HTTPS و يرجعها على انها غير صالحة... 

جميل ! و الحل ؟ Rolleyes
الرد
#4
الحل في اعادة كتابة هذا الجزء:

PHP كود :
if pos('http://',lowercase(url))=0 then
url 
:= 'http://'+url; 


هذا الجزء يقوم بالتحقق من وجود http قبل اضافته للعنوان الذي ادخلناه من نص المكون Edit و هو يعتمد على دالة pos...
يحب عليك اعادة كتابة التحقق بحيث يدعم التحقق من https و http

جرب نفس الأوامر مع حذف الجزء الذي اشرت اليه و سوف يعمل الكود ان شاء الله بدون مشاكل...
[-] كل من 1 user says قال شكرا ل offset على المشاركة المفيدة
  • Rever7eR
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم