次の問題があります。非常に大きなSOAPリクエストを作成しています(データはBase64文字列としてエンコードされたビデオです)。そのため、生のSOAPリクエストとして送信することはできず、HTTP1.1チャンクで送信する必要があります。どうすればいいのかわからないようです。私はここでコードを使用しました: チャンク転送エンコーディングのNSURLConnectionの代替手段は何ですか? しかし、それは私が思っていることをしていないようです-リクエストが多くのチャンクではなく単一のリクエストとしてサーバーに到着することがわかります(サーバーでWireSharkを使用して、着信トラフィックを確認しています。)
Androidの同様の機能がJava用のApacheFoundationsHTTPライブラリを使用して機能することを知っています-これらを使用すると、事前に長さが指定されていないHTTPリクエストはHTTP1.1チャンクリクエストとして送信されます-実際にそれらのリクエストが個々のチャンクとしてのサーバー...私はそれをエミュレートしたいと思います。
(更新:AFNetworkingには機能があるように思われますが、その使用方法に関する例は見つかりません。)
これが私のコードです、多かれ少なかれ:
NSString *soapBody = ....; //some correctly formed SOAP request XML here
NSURL *url = [NSURL URLWithString:...];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url];
[request addValue: ... forHTTPHeaderField:@"SOAPAction"];
[request setHTTPMethod:@"POST"];
[request addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[soapBody dataUsingEncoding:NSUTF8StringEncoding]];
ChunkedTransferConnection* connection = [ChunkedTransferConnection alloc];
[connection establishConnectionWithRequest:request];
ここで、ChunkedTransferConnectionの実装は次のとおりです。
@implementation ChunkedTransferConnection
@synthesize p_connection;
@synthesize p_responseData;
- (void)establishConnectionWithRequest:(NSMutableURLRequest *)request
{
self.p_responseData = [[NSMutableData alloc] initWithLength:0] ;
self.p_connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
}
...
@end