ios - 在 Objective-C 中发送分块的 HTTP 1.1 请求

标签 ios objective-c soap nsurlconnection http-chunked

我有以下问题:我正在创建一个非常大的 SOAP 请求(数据是编码为 Base64 字符串的视频),因此我无法将其作为原始 SOAP 请求发送,而是需要在 HTTP 1.1 中发送 block 。我似乎无法弄清楚该怎么做。我在这里使用了代码: What are alternatives to NSURLConnection for chunked transfer encoding 但它似乎并没有按照我认为应该的方式进行 - 我可以看到请求作为单个请求而不是许多 block 到达服务器(我在服务器上使用 WireShark 来查看传入流量。)

我知道 Android 上的类似功能使用 Java 的 Apache Foundations HTTP 库工作 - 有了这些,任何未预先指定长度的 HTTP 请求都作为 HTTP 1.1 分 block 请求传输 - 我确实可以看到这些请求作为单独的 block 到达服务器......我想效仿。

(更新:在我看来 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

最佳答案

想通了:

    NSInputStream *dataStream = [NSInputStream inputStreamWithData:[soapBody dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBodyStream:dataStream];

这会导致请求自动处于 HTP 1.1 block 中!

关于ios - 在 Objective-C 中发送分块的 HTTP 1.1 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15144640/

相关文章:

ios - 仅在我的 iOS 应用程序中将 tesseract 字符限制为 a-z 和数字

iOS 核心蓝牙 : centralManager:didConnectPeripheral/didFailToConnectPeripheral: not getting called

ios - 如何为 View 设置最大高度限制?

ios - Whatsapp 和 Viber 使用什么机制进行聊天和消息传递

java - 亚马逊产品广告 API - 使用 Java/SOAP 批量 itemLookup 出现 503 错误

iphone - 如何在 UILabel 中为递增数字设置动画

更改 View Controller 时的 iOS 有线卡住问题

ios - XCode 设置以查看不适用于以前操作系统版本的代码

java - Axis2 Web 服务中客户端和服务器如何连接?

java - 使用 JAXB 通过 SOAP 传递 HashMap<String,Object>