我在这个程序中错在哪里
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"];