Get,Postリクエスト
objective-c
ヘッダーファイル
__strong NSMutableData*mData;
メインファイル
-(NSString*)getQueryStringByDic:(NSDictionary*)dic
{
NSArray*keys = [dic allKeys];
NSMutableArray*tmp=[NSMutableArray array];
for (NSString*key in keys) {
[tmp addObject:[NSString stringWithFormat:@"%@=%@",key,dic[key]]];
}
return [tmp componentsJoinedByString:@"&"];
}
-(NSString*)getEncodedQueryStringByDic:(NSDictionary*)dic
{
NSArray*keys = [dic allKeys];
NSMutableArray*tmp=[NSMutableArray array];
for (NSString*key in keys) {
NSString*value = dic[key];
[tmp addObject:[NSString stringWithFormat:@"%@=%@",key,[value stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet alphanumericCharacterSet]] ]];
}
return [tmp componentsJoinedByString:@"&"];
}
-(NSString*)getDatetimeFromDate:(NSDate*)date
{
NSDateFormatter* form = [[NSDateFormatter alloc] init];
NSCalendar* cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[form setCalendar: cal];
[form setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString* str = [form stringFromDate:date];
return str;
}
/**
返り値はNSArrayまたはNSDictionary
**/
-(id)getDataByJsonString:(NSString*)jsonString{
NSData *json_data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError*tmp=nil;
id data = [NSJSONSerialization JSONObjectWithData:json_data options:NSJSONReadingAllowFragments error:&tmp];
if (tmp) {
return nil;
}
return data;
}
-(NSURLConnection*)exeHttpGetWithURL:(NSString*)_url queryString:(NSString*)_getQueryString delegate:(id)delegate
{
NSString *url=[NSString stringWithFormat:@"%@?%@",_url,_getQueryString];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
//送信
return [[NSURLConnection alloc] initWithRequest:request delegate:delegate];
}
-(NSURLConnection*)exeHttpPostWithURL:(NSString*)_url queryString:(NSString*)_postQueryString delegate:(id)delegate
{
//リクエスト設定
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:_url]];
[request setHTTPMethod:@"POST"];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData];
[request setTimeoutInterval:20];
[request setHTTPShouldHandleCookies:FALSE];
NSData*httpBody=[_postQueryString dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:httpBody];
//送信
return [[NSURLConnection alloc] initWithRequest:request delegate:delegate];
}
/**
認証
**/
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
//basic認証のid,passを求められたら
if ([challenge previousFailureCount] == 0) {
NSURLCredential *newCredential = [NSURLCredential credentialWithUser:@"userID"
password:@"password"
persistence:NSURLCredentialPersistenceForSession];
[[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];
}else {
//認証失敗
NSLog(@"failure");
}
}
/**
データ受信
受信データが大きいときは一回で全データを取得できないので、mDataにappendDataしておく
**/
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
if (data) {
[mData appendData:data];
}
}
/**
データ受信完了
**/
- (void) connectionDidFinishLoading:(NSURLConnection *)connection{
NSString*jsonString=[[NSString alloc] initWithData:mData encoding:NSUTF8StringEncoding];
mData=nil;
id json=[self getDataByJsonString:jsonString];
//NSDictionaryのとき
if ([json isKindOfClass:[NSDictionary class]]) {
NSLog(@"NSDictionary\n%@", [json description]);
//NSArrayのとき
}else if([json isKindOfClass:[NSArray class]]){
NSLog(@"NSDictionary\n%@", [json description]);
}
}
-(IBAction)onTapButton:(UIButton*)sender
{
mData=[[NSMutableData alloc]init];
NSString*url=@"/php/50/index.php";
NSMutableDictionary*dic=[NSMutableDictionary dictionary];
dic[@"datetimeOfSend"]=[self getDatetimeFromDate:[NSDate date]];
dic[@"message"]=@"あいうえお";
switch ((int)sender.tag) {
case 0://GET
[self exeHttpGetWithURL:url queryString:[self getEncodedQueryStringByDic:dic] delegate:self];
break;
case 1://POST
[self exeHttpPostWithURL:url queryString:[self getQueryStringByDic:dic] delegate:self];
break;
default:
break;
}
}
php
$tmp=array("yourData" => "none" );
if(!empty($_GET)){
$tmp["yourData"]=$_GET;
$tmp["method"]="GET";
}else if(!empty($_POST)){
$tmp["yourData"]=$_POST;
$tmp["method"]="POST";
}
$tmp["datetime"]=date("Y-m-d H:i:s");
$tmp["randomStr"]=getRandomStr(48);
$tmp["name"]="john";
$tmp["place"]="newyork";
$tmp["device"]="iPhone5s";
header("Content-Type: application/json; charset=utf-8");
echo json_encode($tmp);
exit;
function getRandomStr($length=8){
$str='';
for ($i = 0, $str = null; $i < $length; ) {
$num = mt_rand(0x30, 0x7A);
if ((0x30 <= $num && $num <= 0x39) || (0x41 <= $num && $num <= 0x5A) || (0x61 <= $num && $num <= 0x7A)) {
$str .= chr($num);
$i++;
}
}
return $str;
}
NSLogの結果 GET
NSDictionary
{
datetime = "2014-04-11 14:37:28";
device = iPhone5s;
method = GET;
name = john;
place = newyork;
randomStr = aepa0FUQzn2hOJbB7mwzDztUzpE0FuV5kyihl8t90LQSfNoa;
yourData = {
datetimeOfSend = "2014-04-11 14:37:28";
message = "\U3042\U3044\U3046\U3048\U304a";
};
}
NSLogの結果 Post
NSDictionary
{
datetime = "2014-04-11 14:40:43";
device = iPhone5s;
method = POST;
name = john;
place = newyork;
randomStr = if7wIKtiAIxgJ32GzIlXOPOvzmokZYR6emlJhIpDvmlO8F2S;
yourData = {
datetimeOfSend = "2014-04-11 14:40:43";
message = "\U3042\U3044\U3046\U3048\U304a";
};
}