我有以下问题:我正在创建一个非常大的SOAP请求(数据是一个编码为Base64字符串的视频),因此我不能将其作为原始SOAP请求发送,而是需要在HTTP 1.1块中发送它.我似乎无法弄明白该怎么做.我在这里使用了代码: 对于分块传输编码,NSURLConnection的替代方法是什么, 但它似乎没有做我认为应该做的事情 - 我可以看到请求作为单个请求而不是许多块到达服务器上(我在服务器上使用WireShark来查看传入的流量.)
我知道Android上的类似功能使用Apache Foundations HTTP库进行Java工作 - 有了这些,任何预先未指定长度的HTTP请求都会作为HTTP 1.1 Chunked Request传输 - 我可以看到这些请求到达了服务器作为单独的块...我想模仿它.
(更新:似乎我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];
Run Code Online (Sandbox Code Playgroud)
ChunkedTransferConnection的实现如下
@implementation ChunkedTransferConnection
@synthesize p_connection;
@synthesize p_responseData;
- (void)establishConnectionWithRequest:(NSMutableURLRequest *)request
{
self.p_responseData = [[NSMutableData alloc] initWithLength:0] ;
self.p_connection = [[NSURLConnection …Run Code Online (Sandbox Code Playgroud) 我正在使用ASIHTTPRequest与服务器通信,但它导致崩溃.这个bug早就知道了,但仍然是一个问题.
因此:ASIHTTPRequest有很好的替代方案吗?我在服务器端是灵活的,我也可以使用套接字或使用其他东西.你会为服务器客户端通信做些什么推荐?
我正在尝试连接到Twitter流API端点.它看起来像URLSession支持流式传输URLSessionStreamTask,但我无法弄清楚如何使用API.我也找不到任何示例代码.
我尝试测试以下内容,但没有记录网络流量:
let session = URLSession(configuration: .default, delegate: self, delegateQueue: nil)
let stream = session.streamTask(withHostName: "https://stream.twitter.com/1.1/statuses/sample.json", port: 22)
stream.startSecureConnection()
stream.readData(ofMinLength: 0, maxLength: 100000, timeout: 60, completionHandler: { (data, bool, error) in
print("bool = \(bool)")
print("error = \(String(describing: error))")
})
stream.resume()
Run Code Online (Sandbox Code Playgroud)
我也实现了委托方法(包括URLSessionStreamDelegate),但它们没有被调用.
如果某个代码发布了如何为chunked来自流端点的响应打开持久连接的示例,那将非常有用.此外,我正在寻求不涉及第三方库的解决方案.类似于/sf/answers/663165121/但使用URLSession等效更新的响应将是理想的.
注意:上面的示例代码中省略了授权信息.
目前尚不清楚Alamofire是否支持大型或渐进数据集的分块数据。这是我的应用程序非常需要的功能,否则我可能不得不研究替代方法。
它在Alamofire Github页面上指出,Progress Closure & NSProgress但我不确定这意味着什么。
并根据Wikipedia上有关块式数据传输的描述。
Senders can begin transmitting dynamically-generated content before knowing the total size of that content.
为了清楚起见,让我解释为什么我需要这个。
基本上,我有一个很大的JSON文件,该文件已部分缓存。完整的JSON文件由较小的JSON对象组成。我使用iojs/ nodejs发送数据分块通过res.write()与Express这些人,不知道送Content-Length头并将其作为分块的数据。我已通过验证了此作品html/js。
让我知道您是否想要我提供代码来证明这一点!
ios ×3
iphone ×2
objective-c ×2
swift ×2
alamofire ×1
chunked ×1
http ×1
http-chunked ×1
json ×1
nsurlsession ×1
rest ×1
soap ×1