-1

このプログラムのどこが間違っていますか

else if
   {
   NSString *post =
    [[NSString alloc] initWithFormat:@"username=%@ & password=%@",usernameTxt,passwordTxt];

    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

    NSURL *url = [NSURL URLWithString:@"http://192.168.10.28:5000/wsserver.php"];
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
    [theRequest setHTTPMethod:@"POST"];
    [theRequest setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [theRequest setHTTPBody:postData];

  connection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

    if(connection )
    {
        webData = [[NSMutableData alloc]init];
       //[self alertStatus:@"u r connected with web services " :@"connected!"];
        if ([usernameTxt.text isEqualToString:@"username" ]&&[passwordTxt.text isEqualToString:@"password"])
        {

            NSLog(@"u have move to sns");
        }
   }
    else
    {
        [self alertStatus:@"connection failed" :@"connection Failed!"];
   }
4

1 に答える 1

1

パラメータを適切にエンコードする必要があります。本文の「Content-Type」の種類はapplication/x-www-form-urlencoded. w3c で指定された対応するアルゴリズムは、以下に示すように実装できます。

NSDictionaryまず、値とキーがNSStringsであるにパラメーターを入れます。

NSDictionary* params = @{@"username": @"Ali Baba", @"password": @"Sesam öffne dich"};

注: 文字列には、ASCII 以外の文字、スペース、およびその他の文字が含まれる場合があります。

次に、2 つのヘルパー メソッドを実装します。これらのメソッドは、パラメーター ディクショナリを取得し、それをエンコードおよびシリアル化されたパラメーターを含むオブジェクトに変換してNSData、本体を設定する準備をします。

static NSData* form_urlencode_HTML5_String(NSString* string) {
    NSData* result;
    @autoreleasepool {
        CFStringRef charactersToLeaveUnescaped = CFSTR(" ");
        CFStringRef legalURLCharactersToBeEscaped = CFSTR("!$&'()+,/:;=?@~");

        NSString *s = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
                                kCFAllocatorDefault,
                                (__bridge CFStringRef)string,
                                charactersToLeaveUnescaped,
                                legalURLCharactersToBeEscaped,
                                kCFStringEncodingUTF8));
        s = [s stringByReplacingOccurrencesOfString:@" " withString:@"+"];
        result = [s dataUsingEncoding:NSUTF8StringEncoding];
    }
    return result;
}

static NSData* form_urlencode_HTML5_Parameters(NSDictionary* parameters)
{
    NSMutableData* result = [[NSMutableData alloc] init];
    BOOL isFirst = YES;
    for (NSString* name in parameters) {
        if (!isFirst) {
            [result appendBytes:"&" length:1];
        }
        isFirst = NO;
        assert([name isKindOfClass:[NSString class]]);
        NSString* value = parameters[name];
        assert([value isKindOfClass:[NSString class]]);

        NSData* encodedName = form_urlencode_HTML5_String(name);
        NSData* encodedValue = form_urlencode_HTML5_String(value);

        [result appendData:encodedName];
        [result appendBytes:"=" length:1];
        [result appendData:encodedValue];
    }

    return [result copy];
}

それを使用するには:

NSDictionary* parameters = ...;    
NSData* postData = form_urlencode_HTML5_Parameters(parameters);
[theRequest setHTTPBody:postData];
[theRequest setValue:@"application/x-www-urlformencoded" forHTTPHeaderField:@"Content-Type"];
[theRequest setValue:<length of post data> forHTTPHeaderField:@"Content-Length"];
于 2013-10-24T09:50:11.880 に答える