سؤال

تم رفض تطبيق iPhone الخاص بي فقط لاستخدام الطريقة الخاصة (آمنة للغاية، ويبدو) +setAllowsAnyHTTPSCertificate:forHost: بالنسبة NSURLRequest. وبعد هل هناك API غير خاص لمحاكاة هذه الوظيفة؟

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

نصائح أخرى

في الواقع، أنا اختبار مع 10.6.8 وما زال هذا الرمز يعمل - يستخدم API الخاص ولكن التحقق من أن المحدد موجود (Myurl هو NSURL أحاول التحميل في WebView أو NsurlConnection):

SEL selx = NSSelectorFromString(@"setAllowsAnyHTTPSCertificate:forHost:");
if ( [NSURLRequest respondsToSelector: selx] )
{
    IMP fp;

    fp = [NSURLRequest methodForSelector:selx];

    (fp)([NSURLRequest class], selx, YES, [myurl host]);
}

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

أحد الحلول الغبية حقا هو جعل طريقة فئة خاصة بك:

@implementation NSURLRequest (IgnoreSSL)

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
    return YES;
}

@end

يجب أن يحصل ذلك على الشيكات الخاصة ب API الخاصة بشركة Apple، لكنها لا تزال نفس الشيء (باستخدام واجهة برمجة تطبيقية خاصة وغير موثقة [1] والتي هي عرضة للكسر في أي وقت). في الواقع، الأمر أسوأ لأنه يسمح بكل شيء، وليس فقط هذا المضيف.

1]: API الخاص ذلك ينبغي يتم الإعلان، ولكن API الخاص مع ذلك.

يبدو setallowsanyhttpscertificate الآن غير مدعوم في نظام التشغيل X 10.6.6 تماما.

هل قلت 10.6.6؟ ربما كان ينبغي علي أن قال "سنو فيستا".

ليس حلا، ولكن اقتراح. هل فكرت في استخدام إطار asihttprequest لهذا؟ اكتمال هذا الإطار في جميع الجوانب. تحقق من الوثائق، ربما يمكن أن تساعدك أيضا.

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