如何在 iOS 中使用 SBJSON 以编程方式发布用户名和密码



我在这个程序中错在哪里

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!"];
   }

您需要正确编码参数。正文的"内容类型"类型是application/x-www-form-urlencoded。w3c 指定的相应算法可以实现如下。

首先,将参数放入值和键NSString s 的NSDictionary中:

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"];

最新更新