HTTPリクエスト関係があまりに面倒くさいのでメソッドにしてみた
あろー。
最近ご多忙中な鳥さんですよ。
iPhoneでふぉーんな感じのプログラムとかチマチマやってんですけど。
なんか調べてみた感じ、みなさんシコシコObjective-CでHTTPなプログラムを書いてらっしゃるようで。
あるような気もするけど、HTTPをメソッドとか関数的なものにしちまってみた。非同期でごんす。
動作無保証。
- (NSString *)sendPostRequest:(NSString *)url sendData:(NSData *)sendData { NSURL *nsurl = [NSURL URLWithString:url]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: nsurl]; [request setHTTPMethod: @"POST"]; [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; [request setValue:[NSString stringWithFormat:@"%d", [sendData length]] forHTTPHeaderField:@"Content-Length"]; [request setHTTPBody: sendData]; NSError *error; NSURLResponse *response; NSData *buffer = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; if (buffer != nil) { // response int encodeArray[] = { NSUTF8StringEncoding, // UTF-8 NSShiftJISStringEncoding, // Shift_JIS NSJapaneseEUCStringEncoding, // EUC-JP NSISO2022JPStringEncoding, // JIS NSUnicodeStringEncoding, // Unicode NSASCIIStringEncoding // ASCII }; NSString *dataString = nil; int max = sizeof(encodeArray) / sizeof(encodeArray[0]); for (int i=0; i<max; i++) { dataString = [ [NSString alloc] initWithData : buffer encoding : encodeArray[i] ]; if (dataString != nil) { break; } } return dataString; } else { // error handling return nil; } } - (NSString *)sendPostRequest:(NSString *)url sendString:(NSString *)sendString encode:(int)encode { NSData *requestData = [sendString dataUsingEncoding:encode allowLossyConversion:YES]; return [self sendPostRequest:url sendData:requestData]; } - (NSString *)sendGetRequest:(NSString *)url { NSURL *nsurl = [NSURL URLWithString:url]; NSURLRequest *request = [NSURLRequest requestWithURL:nsurl]; NSURLResponse *response = nil; NSError *error = nil; NSData *data = [ NSURLConnection sendSynchronousRequest : request returningResponse : &response error : &error ]; // error NSString *errorStr = [error localizedDescription]; if (0 < [errorStr length]) { return nil; } // response int encodeArray[] = { NSUTF8StringEncoding, // UTF-8 NSShiftJISStringEncoding, // Shift_JIS NSJapaneseEUCStringEncoding, // EUC-JP NSISO2022JPStringEncoding, // JIS NSUnicodeStringEncoding, // Unicode NSASCIIStringEncoding // ASCII }; NSString *dataString = nil; int max = sizeof(encodeArray) / sizeof(encodeArray[0]); for (int i=0; i<max; i++) { dataString = [ [NSString alloc] initWithData : data encoding : encodeArray[i] ]; if (dataString != nil) { break; } } return dataString; } - (NSString *)sendGetRequest:(NSString *)url sendString:(NSString *)sendString { return [self sendGetRequest:[NSString stringWithFormat:@"%@%@%@", url, @"?", sendString]]; } - (NSString *)sendGetRequest:(NSString *)url sendString:(NSString *)sendString encode:(int)encode { return [self sendGetRequest:[NSString stringWithFormat:@"%@%@%@", url, @"?", [sendString dataUsingEncoding:encode allowLossyConversion:YES]]]; }
- (NSString *)sendGetRequest:(NSString *)url sendArray:(NSDictionary *)sendArray encode:(int)encode;
とか
- (NSString *)sendPostRequest:(NSString *)url sendArray:(NSDictionary *)sendArray encode:(int)encode {
とか、あとクラス化したりできたらいーなーと思いつつ、中途半端な感じのものでんねぇ。えぇ。
まるちぱーと・ふぉーむでーた とか ひどーき とか美味しいものもやってません。ウチ大衆食堂ですので(ぇ
PHP的にお気軽なインタフェースになったら良いなぁ。
ライセンスはWTFPL辺りでてけとに。