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辺りでてけとに。