Problema molto strano (per me) durante il caricamento di file su un server utilizzando ASIFormDataRequest.ASIHTTPRequest: un problema (potenzialmente) specifico dell'operatore durante il caricamento di dati/server riceve vuoto POST
Durante il caricamento tramite WiFi, non ci sono problemi, posso caricare bene. Quando si carica su 3G utilizzando O2 UK come vettore, non ci sono problemi neanche. Quando effettuo il caricamento utilizzando lo stesso identico codice dello stesso server che utilizza Vodafone UK, la richiesta HTTP arriva al server con i contenuti POST eliminati. Se provo la stessa richiesta ma senza caricare un'immagine (aggiungo test => sì come alcuni dati POST), allora funzionerà, ma se ho test => yes e allego un file, arriva al server con il POST dati spogliati.
NB Sto utilizzando l'ultima versione di ASIHTTPRequest su un iPhone 4S ed è riproducibile su diversi altri telefoni che utilizzano Vodafone UK e O2 UK in modo diverso.
Quindi, sto puntando il mio codice objc al seguente script PHP, che stampa solo quali è ricevuto:
<?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.');
Il codice objc sto usando è:
- (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]);
}
Se faccio funzionare l'app con WiFi abilitato, o su O2 UK, ottengo la seguente risposta:
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.
Fin qui tutto bene!
Se riprovo con WiFi disattivato, ma con il segnale quasi piena 3G su Vodafone UK:
Success Response: FILES: Array
(
)
POST: Array
(
)
GET: Array
(
)
done.
Molto strano: non solo è il file ora manca, ma il valore POST 'test' è anche mancante. Tuttavia, nessun errore da PHP o ASIHTTPRequest.
Qualcuno può far luce per me? Se Vodafone sta manipolando cose del genere, perché non è più noto? L'unica altra persona che posso trovare riporta un problema simile posted a year ago.
Se commento fuori il [richiesta AddData] linea, allora funziona perfettamente:
Success Response: FILES: Array
(
)
POST: Array
(
[Test] => Yes
)
GET: Array
(
)
done.
Molto strano. Ho cercato di farlo funzionare tutto il giorno, ma finora non ho avuto fortuna. Sarei molto grato se qualcuno potesse gettare luce, o anche solo avere lo stesso problema.
Oh uomo. Ecco la risposta quando si utilizza HTTPS: 'Successo di risposta: FILES: Array ( [foto] => Array ( [name] => smalltestimage.png [type] => image/png [tmp_name] =>/tmp/phpzzo5xF [errore] => 0 [size] => 13211 ) ) POST: Array ( [test] => Si ) GET: Array ( ) fatto. ' Quindi funziona su HTTPS e suppongo che sia in qualche modo correlato. Molto strano!! Vodafone avrebbe una ragione per farlo? –
Nessun indizio. Sembra proprio che sia un proxy HTTP spezzato che hanno impostato. Spero che questo abbia aiutato! –
Voto positivo. Saluti :) –