Bardzo dziwny (dla mnie) problem podczas przesyłania plików na serwer przy użyciu ASIFormDataRequest.ASIHTTPRequest: (potencjalnie) specyficzny dla operatora problem podczas przesyłania danych/serwera otrzymuje pusty POST
Przesyłając przez Wi-Fi, nie ma problemu, mogę przesłać dobrze. Podczas przesyłania przez 3G za pomocą O2 UK jako operatora, nie ma problemu. Kiedy wysyłam używając tego samego kodu na tym samym serwerze przy użyciu Vodafone UK, żądanie HTTP dociera do serwera z usuniętą treścią POST. Jeśli spróbuję tego samego żądania, ale bez przesłania obrazu (po prostu dodaj test => tak jako niektóre dane POST), to zadziała, ale jeśli mam test => tak i załączam plik, dociera on do serwera z POST dane zostały usunięte.
NB Używam najnowszej wersji ASIHTTPRequest na iPhone 4S, i jest odtwarzalna na kilku innych telefonach przy użyciu różnych Vodafone UK i O2 UK.
Tak, jestem wskazując mój kod objc w poniższym skrypcie PHP, który po prostu drukuje co otrzymali:
<?php
error_reporting(E_ALL);
ini_set("display_startup_errors","1");
ini_set("display_errors","1");
echo "FILES: ".print_r($_FILES,true);
echo "POST: ".print_r($_POST,true);
echo "GET: ".print_r($_GET,true);
die('done.');
Kod objc używam to:
- (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]);
}
Jeśli uruchomić aplikację z WiFi włączone, albo na O2 UK, mam następującą odpowiedź:
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.
Jak dotąd tak dobrze!
Gdybym ponownie z WiFi wyłączone, ale z prawie pełnego sygnału 3G Vodafone UK:
Success Response: FILES: Array
(
)
POST: Array
(
)
GET: Array
(
)
done.
Bardzo dziwne: nie tylko jest plik teraz brakuje, ale „test” wartość post jest również brakujący. Jednak nie ma błędów z PHP lub ASIHTTPRequest.
Czy ktoś może rzucić dla mnie jakieś światło? Jeśli Vodafone manipuluje takimi rzeczami, dlaczego nie jest bardziej znany? Jedyną inną osobą, którą mogę znaleźć, zgłaszającą podobny problem, jest posted a year ago.
Gdybym zakomentuj [Request AddData] linię, to działa idealnie:
Success Response: FILES: Array
(
)
POST: Array
(
[Test] => Yes
)
GET: Array
(
)
done.
bardzo dziwne. Próbowałem zrobić to cały dzień, ale bez powodzenia. Byłbym bardzo wdzięczny, gdyby ktoś mógł rzucić jakiekolwiek światło, a nawet miałby ten sam problem.
O człowieku. Oto odpowiedź przy użyciu protokołu HTTPS: 'Sukces Odpowiedź: Pliki: Array ( [zdjęcia] => Array ( [name] => smalltestimage.png [type] => image/png [tmp_name] =>/tmp/phpzzo5xF [błąd] => 0 [size] => 13211 ) ) POST: Array ( [test] => Tak ) GET: Array ( ) zrobić. ' Więc to działa na HTTPS, i myślę, że to jest jakoś powiązane. Bardzo dziwne !! Czy Vodafone ma ku temu powód? –
Nie ma pojęcia. To naprawdę brzmi, jakby to był uszkodzony serwer proxy HTTP, który skonfigurowali. Mam nadzieję, że pomogło! –
Awansuj. Pozdrawiam :) –