gpt4 book ai didi

objective-c - 带凭据的 AFNetworking 上传任务(HTTP 基本身份验证)

转载 作者:太空狗 更新时间:2023-10-30 03:45:29 26 4
gpt4 key购买 nike

我需要将视频文件从我的应用程序上传到服务器。我尝试通过 [AFHTTPRequestOperationManager post:parameters:success:failure] 这样做,但不幸的是一直收到请求超时。我现在正在尝试类似于 Creating an Upload Task from the AF Docs .

我读了on SOAF Docs关于 setSessionDidReceiveAuthenticationChallengeBlock: 并尝试实现整个上传错误,如下所示:

__block ApiManager *myself = self;

// Construct the URL
NSString *strUrl = [NSString stringWithFormat:@"%@/%@", defaultUrl, [self getPathForEndpoint:endpoint]];
NSURL *URL = [NSURL URLWithString:strUrl];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
[request setHTTPMethod:@"POST"];

// Build a session manager
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

// Set authentication handler
[manager setSessionDidReceiveAuthenticationChallengeBlock:^NSURLSessionAuthChallengeDisposition(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential *__autoreleasing *credential) {
*credential = myself.credentials;
return NSURLSessionAuthChallengeUseCredential;
}];


// Create the upload task
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
[myself endpoint:endpoint returnedFailure:error];
} else {
[myself endpoint:endpoint returnedSuccess:responseObject];
}
}];

// and run with it
[uploadTask resume];

myself.credentials 对象之前已设置为具有正确的用户名和密码。每当此请求触发时,我都会收到 401 unauthorised 作为响应。我尝试将 NSLog(@"CHALLENGE") 放入上面的挑战 block 中,但它似乎从未被调用过,因此 AFNetworking 没有给我提供凭证的方法。我知道这在服务器端运行得非常好,因为我已经使用 Postman 对其进行了测试。

我怎样才能让 AFNetworking 让我为这个上传任务提供 HTTP Basic Auth 的凭据?

最佳答案

我不确定 AFNetworking 的 setSessionDidReceiveAuthenticationChallengeBlock,但只要您有一个 NSMutableURLRequest,您就可以直接在请求对象上设置授权 HTTP header :

[请求 setValue:base64AuthorizationString forHTTPHeaderField:@"Authorization"];

请记住,该值必须是 username:password 字符串的 base64 表示。

否则,对于 session 管理器上的 GET、POST 等请求,您可以在 session 管理器使用的请求序列化程序上设置凭据。见:

[AFHTTPRequestSerializer setAuthorizationHeaderFieldWithUsername:password:][AFHTTPRequestSerializer clearAuthorizationHeader]

关于objective-c - 带凭据的 AFNetworking 上传任务(HTTP 基本身份验证),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26107346/

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