-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 的 a 中:

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

注意:字符串可能包含非 ASCII 字符、空格和其他字符。

然后,实现两个辅助方法,它们接受参数字典并将其转换为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 回答