2013-03-27 2 views
1

Я пытался заставить этот код работать для отправки данных torrent в API μTorrent Web, к сожалению, насколько я могу судить, никто когда-либо пытался сделать обработчик файла .torrent для μTorrent в Objective-C раньше, что не удивительно.Попытка отправить многостраничные данные/данные формы в Objective-C, в веб-API μTorrent

У меня здесь есть этот код, но я всегда получаю сообщение об ошибке: «Ошибка: содержимое файла торрента не предоставляется в параметре формы».

NSMutableURLRequest * request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@?token=%@&action=add-file", [self getBaseURL], token]]]; 
NSString * boundary = @"[email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]!"; 
NSMutableData * body = [NSMutableData alloc]; 
NSData * torrentFileContents = [[NSFileManager defaultManager] contentsAtPath:fileName]; 

[request setHTTPMethod:@"POST"]; 
[request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"Content-Type"]; 
[request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"enctype"]; 

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", @"application/x-bittorrent"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"torrent_file\"; filename=\"%@\"\r\n", fileName] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Length: %ld\r\n", [torrentFileContents length]] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[NSData dataWithData:torrentFileContents]]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 


[request setHTTPBody:body]; 

ответ

0

Я нашел пример того, что я хотел сделать, написано в JS, я был в состоянии сделать его работу путем тонкой настройки кода, чтобы выглядеть следующим образом.

NSMutableURLRequest * request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@?token=%@&action=add-file", [self getBaseURL], token]]]; 
NSString * boundary = [NSString stringWithFormat:@"AJAX-----------------------%f", [[[NSDate alloc] init] timeIntervalSince1970]]; 
NSMutableData * body = [NSMutableData alloc]; 
NSData * torrentFileContents = [[NSFileManager defaultManager] contentsAtPath:fileName]; 

[request setHTTPMethod:@"POST"]; 
[request addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"Content-Type"]; 

[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"torrent_file\"; filename=\"%@\"\r\n", fileName] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", @"application/x-bittorrent"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[NSData dataWithData:torrentFileContents]]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

[request setHTTPBody:body]; 

return request; 
1

Почему вы размещаете тип и длину контента в теле запроса? Вы пытались использовать setValue для добавления необходимых HTTP-заголовков, таких как Content-Type?

, например:

[request addValue:@"text/xml;charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
+0

По существу, я вставляю его, потому что нашел пример запроса на μTorrent, который был одним из тех, кто документировал API, подтвержденный как рабочий пример. http://forum.staging.utorrent.com/viewtopic.php?id=102348 –

 Смежные вопросы

  • Нет связанных вопросов^_^