gpt4 book ai didi

ios - 每个 "POST"异步请求是否有任何文档大小限制?

转载 作者:行者123 更新时间:2023-12-01 16:46:55 25 4
gpt4 key购买 nike

我正在使用包含数百个位置点的文档设置异步发布请求。我想将此文档保存在我的 couchdb 中。

对于小文档,请求响应在很短的时间内返回,存储文档。当文档增长更多(仍然<~200k)时,响应需要很长时间,然后返回超时。我将超时设置为 120 秒。

我是否缺少某些设置或出现编码错误?

- (void)post:(NSData*) requestBody {
startTime = [NSDate date];
NSURL* serverURL = [NSURL URLWithString: @"https://myUser:myPassword@myAcc.cloudant.com/myDB"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:serverURL];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPMethod:@"POST"];
[request setTimeoutInterval:120.0];

[request setHTTPBody:requestBody];


[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
if (response != nil) {
if ([response respondsToSelector:@selector(statusCode)])
{
int statusCode = [((NSHTTPURLResponse *)response) statusCode];
NSLog(@"StatusCode returned was %i", statusCode);
}
NSLog(@"Response: %@",response);
}

if ([data length] >0 && error == nil)
{
NSLog(@"data: %@", data);
// DO YOUR WORK HERE

}
else if ([data length] == 0 && error == nil)
{
NSLog(@"Nothing was downloaded.");
}
else if (error != nil){
NSLog(@"Error = %@", error);
}

}];

编辑:超时问题仍然存在。我在 didSendBodyData: 中记录了进度,并认识到该字节已发送。不是全部,然后超时发生。使用 curl,上传工作正常。

此外,我在日志中发现了一件事:请求成功时,总字节数和预期字节数相同:
Total Bytes written: 161120
Expected Bytes to write: 161120

When the request failed:
Total Bytes written: 163840
Expected Bytes to write: 166839

还有其他想法吗?
- (void)post:(NSData*) requestBody {
NSURL* serverURL = [NSURL URLWithString: @"https://mySpace.cloudant.com/myDb"];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:serverURL
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:30.0];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:requestBody];

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];
}

#pragma mark -
#pragma mark Connection Delegates
- (void) connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([challenge previousFailureCount] == 0) {
NSLog(@"received authentication challenge");
NSURLCredential *newCredential = [NSURLCredential credentialWithUser:@"myUser"
password:@"myPwd"
persistence:NSURLCredentialPersistenceForSession];
NSLog(@"credential created");
[[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];
NSLog(@"responded to authentication challenge");
}
else {
NSLog(@"previous authentication failure");
}
}

最佳答案

这似乎是 URL 格式的问题。使用低级 HTTP 库时,您必须手动添加基本身份验证 header - NSURLConnection and Basic HTTP Authentication in iOS展示了如何做到这一点。超时很可能是由于设备试图联系无效的主机。

您可以通过尝试直接使用 curl 发出请求来测试这一点,即:

curl -XPOST https://username.password@username.cloudant.com/db -H 'Content-Type:application/json' -d @test.json

其中 test.json 包含正在超时的 JSON。

使用 curl 可以更轻松地调试(您将看到原始响应),并且还可以确认它是服务器端问题还是特定于库的问题。

关于ios - 每个 "POST"异步请求是否有任何文档大小限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19202517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com