我正在构建一个与Web服务通信的应用程序。用户密码和敏感信息将传递给.php脚本。目前它刚刚通过GET请求发送,并且 - 我相信你们会同意 - 出于安全原因,这是非常糟糕的。
这是我的脚本,用于将信息发送到PHP脚本然后解析它。
NSData * houseData = [NSData dataWithContentsOfURL:houseUrl];
NSString * password = _passwordText.text;
NSString * getDataURL = [NSString stringWithFormat:@"http://172.20.10.3:8888/finalproject/ios/login.php?username=%@&password=%@&token=%@", username, password,token];
NSURL * url = [NSURL URLWithString:getDataURL];
NSData * data = [NSData dataWithContentsOfURL:url];
_jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
_citiesArray = [[NSMutableArray alloc] init];
for(int i = 0; i < _jsonArray.count; i++)
{
code = [[_jsonArray objectAtIndex:i] objectForKey:@"code"];
}
是否有人能够指出我正确的方向将其转变为POST请求?
感谢您的帮助。
答案 0 :(得分:0)
从GET更改为POST在安全方面不会是一个很大的胜利,但至少你的参数不会出现在代理日志中。此外,GET请求有时会有长度限制(在服务器,代理中)。
尝试此代码(我假设您将JSON数据作为响应):
static NSString* const kDataURL = [NSString stringWithFormat:@"http://172.20.10.3:8888/finalproject/ios/login.php"];
static NSString* const kDataBody = @"?username=%@&password=%@&token=%@";
NSURL *url = [NSURL URLWithString:kDataUrl];
req = [NSMutableURLRequest requestWithURL:url];
[req setHTTPMethod:@"POST"];
NSString *body = [NSString stringWithFormat:kDataBody, username, password, token];
[req setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection
sendAsynchronousRequest:req
queue:queue
completionHandler:^(NSURLResponse *response,
NSData *data,
NSError *error) {
if (error == nil && [data length] > 0) {
id json = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableContainers
error:nil];
NSLog(@"JSON: %@", json);
} else {
NSLog(@"ERROR: %@", error);
}
}];
此外,您可能希望使用username
或以下函数对password
,token
和[token stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
进行编码:
- (NSString*)urlencode:(NSString*)str
{
return (NSString*)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
NULL,
(__bridge CFStringRef) str,
NULL,
CFSTR(":/?@!$&'()*+,;="),
kCFStringEncodingUTF8));
}
在PHP脚本中,您不必进行太多更改 - 除了确保使用$_POST
或$_REQUEST
而不是$_GET
数组。