6

Ich muss Videodateien von meiner App auf einen Server hochladen. Ich habe versucht, dies über [AFHTTPRequestOperationManager post:parameters:success:failure], aber leider Anfragen Timeouts erhalten. Ich versuche jetzt etwas Ähnliches wie Erstellen einer Upload-Aufgabe von the AF Docs.AFNetworking Upload Aufgabe mit Anmeldeinformationen (HTTP Basic Auth)

las ich on SO und die AF Docs über setSessionDidReceiveAuthenticationChallengeBlock: und versuchte, die ganze Upload malarky zu implementieren, wie folgt:

__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]; 

Das myself.credentials Objekt vorher gesetzt wurde, um den korrekten Benutzernamen und Passwort. Immer wenn diese Anfrage ausgelöst wird, erhalte ich als Antwort eine Antwort von . Ich habe versucht, NSLog(@"CHALLENGE") in den Challenge-Block oben zu setzen, aber es scheint nie aufgerufen zu werden, so dass AFNetworking mir keine Möglichkeit gibt, Anmeldeinformationen zu liefern. Ich weiß, dass dies auf der Serverseite sehr gut funktioniert, weil ich es mit Postman getestet habe.

Wie kann ich AFNetworking erhalten, um mir die Zugangsdaten für HTTP Basic Auth mit dieser Upload-Aufgabe zu liefern?

Antwort

0

Ich bin nicht sicher über AFNetworking des setSessionDidReceiveAuthenticationChallengeBlock, aber solange Sie ein NSMutableURLRequest haben, können Sie den Autorisierungs-HTTP-Headers direkt auf das Request-Objekt gesetzt:

[request setValue:base64AuthorizationString forHTTPHeaderField:@"Authorization"];

Beachten Sie, dass der Wert muss Seien Base64-Darstellung der username:password Zeichenfolge.

Andernfalls können Sie für GET-, POST- und andere Anfragen an einen Sitzungsmanager die Anmeldeinformationen für den vom Sitzungsmanager verwendeten Anfrage-Serializer festlegen. Siehe:

[AFHTTPRequestSerializer setAuthorizationHeaderFieldWithUsername:password:] [AFHTTPRequestSerializer clearAuthorizationHeader]