سؤال

وأنا أكتب برنامج صغير (باستخدام الكاكاو اللمس)، الذي يتصل مع خدمة ويب. رمز لاستدعاء خدمة ويب، هو ما يلي:

- (IBAction)send:(id)sender
{
    if ([number.text length] > 0)
    {
        [[UIApplication sharedApplication] beginIgnoringInteractionEvents];  
        [activityIndicator startAnimating];
        NSString *modded;
        modded = [self computeNumber];
        NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:      [NSURL URLWithString:@"https://tester:%=&=-Test2009@samurai.sipgate.net/RPC2"]];
        [theRequest setHTTPMethod:@"POST"];
        [theRequest addValue:@"text/xml" forHTTPHeaderField:@"content-type"];
        [theRequest setCachePolicy:NSURLCacheStorageNotAllowed];
        [theRequest setTimeoutInterval:5.0];
        NSString* pStr = [[NSString alloc] initWithFormat:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?><methodCall><methodName>samurai.SessionInitiate</methodName><params><param><value><struct><member><name>LocalUri</name><value><string></string></value></member><member><name>RemoteUri</name><value><string>sip:%@@sipgate.net</string></value></member><member><name>TOS</name><value><string>text</string></value></member><member><name>Content</name><value><string>%@</string></value></member><member><name>Schedule</name><value><string></string></value></member></struct></value></param></params></methodCall>", modded, TextView.text];
        NSData* pBody = [pStr dataUsingEncoding:NSUTF8StringEncoding];
        [theRequest setHTTPBody:pBody];
        NSURLConnection *theConnection = [[NSURLConnection alloc]     initWithRequest:theRequest delegate:self];

        if (!theConnection)
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" 
                                                            message:@"A Connection could not be established!"
                                                           delegate:nil 
                                                  cancelButtonTitle:@"OK" 
                                                  otherButtonTitles: nil];
            [alert show];
            [alert release];
            sendButton.enabled = TRUE;
            return;
        }
        [pStr release];
        [pBody release];
    }
}

واسم المستخدم وكلمة المرور يجب أن تكون في URL، وأنها تعمل في معظم الحالات، ولكن عندما تتكون كلمة المرور من أحرف خاصة مثل في المثال "٪ = & = - Test2009"، وخدمة ويب لا يستجيب. إذا كان شيء من هذا القبيل "Test2009" أنه يعمل بشكل جيد. هل لديها فكرة لماذا، وربما حل لذلك؟

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

المحلول

والأحرف الخاصة يجب أن تكون URL ترميز، وURL التي طلبتها،

https://tester:%=&=-Test2009@samurai.sipgate.net/RPC2

و.. غير صالح، وتحديدا الجزء %= (يستخدم % للأحرف الهروب، على سبيل المثال يستخدم %20 لتمثيل مسافة)، لذلك ..

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:
    [NSURL URLWithString:@"https://tester:%=&=-Test2009@samurai.sipgate.net/RPC2"]];

و.. يجب تغيير إلى شيء من هذا القبيل:

NSString *theAddress = [NSString stringWithFormat:@"https://%@:%@@%@",
                        [@"tester" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
                        [@"%=&=-Test2009" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
                        @"example.com"];

NSURL *theURL = [NSURL URLWithString:theAddress];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:theURL];

وهذا تطلب https://tester:%25=&=-Test2009@example.com URL

نصائح أخرى

ويجب استخدام أحرف آمنة URL في سلسلة الخاص بك عندما جعل URL، استخدم هذا الأسلوب NSString <لأ href = "http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/ NSString_Class / المرجع / NSString.html # // apple_ref / أورينت / instm / NSString / stringByAddingPercentEscapesUsingEncoding: "يختلط =" نوفولو noreferrer "> stringByAddingPercentEscapesUsingEncoding: التي سوف نفعل ذلك لك

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