10

私は iPhone アプリを開発しており、手動で POST リクエストを作成しています。現在、送信する前に JSON データを圧縮する必要があるため、コンテンツが圧縮されていることをサーバーに伝える方法を探しています。サーバーは JSON データを想定しているため、コンテンツ タイプ ヘッダーを gzip に設定することは受け入れられない場合があります。JSONデータがgzipに圧縮されていることを伝えるヘッダーを追加するだけのような、透過的なソリューションを探しています。

標準的な方法は、クライアントがエンコーディングを受け入れることをサーバーに伝えることですが、最初にエンコーディングヘッダーを受け入れてGETリクエストを行う必要があります。私の場合、すでにエンコードされているデータを投稿したいと考えています。

4

2 に答える 2

-2

次のような一般的な方法を実装し、適切なヘッダーを設定すると役立つ場合があります。

// constructing connection request for url with no local and remote cache data and timeout seconds
NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:callingWebAddress]];// cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:timoutseconds];
[request setHTTPMethod:@"POST"];

NSMutableDictionary *headerDictionary = [NSMutableDictionary dictionary];
[headerDictionary setObject:@"application/json, text/javascript" forKey:@"Accept"];
[headerDictionary setObject:@"application/json" forKey:@"Content-Type"];

//Edit as @centurion suggested
[headerDictionary setObject:@"Content-Encoding" forKey:@"gzip"];
[headerDictionary setObject:[NSString stringWithFormat:@"POST /Json/%@ HTTP/1.1",method] forKey:@"Request"];
[request setAllHTTPHeaderFields:headerDictionary];

// allocation mem for body data
self.bodyData = [NSMutableData data];

[self appendPostString:[parameter JSONFragment]];

// set post body to request
[request setHTTPBody:bodyData];

NSLog(@"sending data %@",[[[NSString alloc] initWithData:bodyData encoding:NSUTF8StringEncoding]autorelease]);

// create new connection for the request
// schedule this connection to respond to the current run loop with common loop mode.
NSURLConnection *aConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
//[aConnection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
self.requestConnenction = aConnection;
[aConnection release];
于 2012-05-02T09:14:55.003 に答える