ASIHTTPRequest: (потенциально) проблема оператора связи при загрузке данных / сервер получает пустой POST

Очень странная (для меня) проблема при загрузке файлов на сервер с помощью ASIFormDataRequest.

При загрузке по Wi-Fi проблем нет, я могу загрузить нормально. При загрузке через 3G с использованием O2 UK в качестве оператора связи тоже нет проблем. Когда я загружаю с использованием того же самого кода тот же сервер, использующий Vodafone UK, HTTP-запрос поступает на сервер с удаленным содержимым POST. Если я попробую тот же запрос, но без загрузки изображения (просто добавьте test => yes в качестве некоторых данных POST), тогда это сработает, но если у меня есть test => yes и прикрепите файл, он прибудет на сервер с POST данные удалены.

NB. Я использую последнюю версию ASIHTTPRequest на iPhone 4S, и она воспроизводится на нескольких других телефонах, использующих Vodafone UK и O2 UK по-разному.

Итак, я указываю свой код objc на следующий сценарий PHP, который просто распечатывает то, что он получил:

Я использую код obj-c:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSURL *url = [NSURL URLWithString: @"http://myserver.com/debugger.php"];
    ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:url];

    [request setDelegate:self];
    [request setDidFinishSelector:@selector(networkRequestSuccess:)];
    [request setDidFailSelector:@selector(networkRequestFailure:)];
    [request setTimeOutSeconds:120];

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"smalltestimage" ofType:@"png"];  
    NSData *myData = [NSData dataWithContentsOfFile:filePath];  
    if (myData) {  
        [request addPostValue:@"Yes" forKey:@"Test"];
        [request addData:myData withFileName:@"smalltestimage.png" andContentType:@"image/png" forKey:@"photos"];
        [request startSynchronous];
    } 
    else{
        NSLog(@"File not found..");
    }

    [request autorelease];
}

- (void)networkRequestSuccess:(ASIHTTPRequest *)request{

    NSLog(@"Success Response: %@", [request responseString]);

}

- (void)networkRequestFailure:(ASIHTTPRequest *)request{
    NSLog(@"Fail Response: %@", [request responseString]);
}

Если я запускаю приложение с Wi-Fi включен, или на O2 UK, я получаю следующий ответ:

Success Response: FILES: Array
(
    [photos] => Array
        (
            [name] => smalltestimage.png
            [type] => image/png
            [tmp_name] => /tmp/phpYTdw4g
            [error] => 0
            [size] => 13211
        )

)
POST: Array
(
    [Test] => Yes
)
GET: Array
(
)
done.

Пока все хорошо!

Если я попытаюсь повторить попытку с отключенным Wi-Fi, но с почти полным сигналом 3G на Vodafone UK:

Success Response: FILES: Array
(
)
POST: Array
(
)
GET: Array
(
)
done.

Очень странно: теперь отсутствует не только файл, но и «тестовое» значение POST. Однако никаких ошибок ни от PHP, ни от ASIHTTPRequest.

Может ли кто-нибудь пролить на меня свет? Если Vodafone манипулирует подобными вещами, почему об этом мало известно? Единственный человек, которого я могу найти, сообщающий о подобной проблеме , опубликованный год назад .

Если я закомментирую строку [request addData], то она отлично работает:

Success Response: FILES: Array
(
)
POST: Array
(
    [Test] => Yes
)
GET: Array
(
)
done.

Очень странно. Я пытался заставить это работать весь день, но пока безуспешно. Я был бы очень признателен, если бы кто-нибудь мог пролить свет или даже столкнулся с той же проблемой.

5
задан Ian Dundas 19 November 2011 в 15:55
поделиться