Это локон команды я использую, чтобы загрузить PDF и это работает прекрасно:NSURLSession выполнить задачу загрузки, как «завиток»
curl -u USERNAME:PASSWORD -T MyPDF.pdf —url https://mywebserver.com
Я использую NSURLSession и загрузить задачу с делегатами, но мой PDF никогда не загружен.
Вот мой код:
- (IBAction)upload:(id)sender {
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"https://mywebserver.com/"]];
[request setHTTPMethod:@"POST"];
NSString* pdfPath = [[NSBundle mainBundle] pathForResource:@"bill" ofType:@"pdf"];
NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromFile:[NSURL fileURLWithPath:pdfPath]];
[uploadTask resume];
}
- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session {
}
- (void)URLSession:(NSURLSession *)session task:(nonnull NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error {
if (error) {
NSLog(@"Error = %@", error);
}
}
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(nonnull NSURLAuthenticationChallenge *)challenge completionHandler:(nonnull void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler {
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, [NSURLCredential credentialWithUser:@"username" password:@"password" persistence:NSURLCredentialPersistenceForSession]);
}
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler {
completionHandler(NSURLSessionResponseAllow);
}
- (void)URLSession:(NSURLSession *)session dataTask:(nonnull NSURLSessionDataTask *)dataTask didReceiveData:(nonnull NSData *)data {
if (data) {
NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}
}
- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(nullable NSError *)error {
if (error) {
NSLog(@"Error = %@", error);
}
}
Все ли делегаты называются? – Siriss
Да. didReceiveData: метод возвращает мне код javascript и выглядит как код для окна входа в систему. Но команда curl работает, и я не уверен, чего не хватает в моем коде для использования учетных данных. – AceOfTheBase
У меня нет ничего конкретного, чтобы предположить, как «завиток» может фактически обрабатывать учетные данные (справочная страница не соответствует специфике), но я ** предлагаю вам использовать такой инструмент, как Charles или WireShark, чтобы наблюдайте, как пакеты отправляются с вашего компьютера на ваш сервер с помощью команды 'curl', которая работает для вас; Я подозреваю, что есть или несколько круговых поездок, которые происходят, например, Проверка подлинности Kerberos, или если по какой-то магии все это обрабатывается в одном кругосветном путешествии, вероятно, он похоронен в заголовках. – fullofsquirrels