2012-09-30 8 views
9

Utilizzo il framework AFNetworking e devo inviare una richiesta di modulo (POST) al server. Ecco un esempio di ciò che server si aspetta:Come simulare l'invio del modulo HTTP (POST) su iOS

<form id="form1" method="post" action="http://www.whereq.com:8079/answer.m"> 
    <input type="hidden" name="paperid" value="6"> 
    <input type="radio" name="q77" value="1"> 
    <input type="radio" name="q77" value="2"> 
    <input type="text" name="q80"> 
</form> 

considero utilizzando il multipartFormRequestWithMethod in AFHTTPClient, proprio come quello che è stato discusso in post Sending more than one image with AFNetworking. Ma non ho idea di come aggiungere i dati del modulo con il valore di input del tipo "radio".

+0

Sembra che il tuo esempio di ciò che il server si aspetta non è venuto attraverso. Inoltre, posso fornire un esempio di come farlo con NSURLConnection se non sei collegato ad AFNetworking ... –

+0

hi obuseme, per favore fornisci l'esempio. Non mi dispiace usare NSURLConnection e NSMutableRequest –

+0

risolverlo, non è niente di eccezionale ma aggiungere alcuni parametri di richiesta POST. –

risposta

22

Ecco un esempio utilizzando NSURLConnection per inviare parametri POST:

// Note that the URL is the "action" URL parameter from the form. 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.whereq.com:8079/answer.m"]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; 
//this is hard coded based on your suggested values, obviously you'd probably need to make this more dynamic based on your application's specific data to send 
NSString *postString = @"paperid=6&q77=2&q80=blah"; 
NSData *data = [postString dataUsingEncoding:NSUTF8StringEncoding]; 
[request setHTTPBody:data]; 
[request setValue:[NSString stringWithFormat:@"%u", [data length]] forHTTPHeaderField:@"Content-Length"]; 
[NSURLConnection connectionWithRequest:request delegate:self]; 
+0

Ho preso un blocco di codice Web con un parametro di modulo "azione" (come nell'esempio fatto), un input di "email" e un altro di "password", impostato il mio URL sull'URL "azione", quindi ho utilizzato il precedente per aggiungere i valori email/password (UUEncoded), e wham, ha funzionato per la prima volta! Vorrei poterti dare il doppio dei voti! –

+0

come se gli altri campi fossero oggetti? cioè NSString * postString = @ "paperid = 6 & q77 = 2 & q80 = blah & obj = ?????"; - come hai gestito questo? –

5

Se si dà un'occhiata a ciò che il browser invia al server quando si utilizza questo modulo (utilizzando il pannello di debug nel tuo browser) si vedrebbe che i dati richiesta POST assomiglia a questo:

paperid=6&q77=2&q80=blah 

Questo è il valore inserito dal pulsante di opzione selezionato come valore per la voce POST corrispondente e si ottiene una sola voce per tutti i pulsanti di opzione. (Contrariamente ai pulsanti di commutazione, in cui si ottiene un valore per ciascuno attualmente selezionato.)

Una volta compreso il formato della stringa POST dovresti essere in grado di creare la richiesta nel solito modo utilizzando ASIFormDataRequest.

2

Ecco come fare con STHTTPRequest

STHTTPRequest *r = [STHTTPRequest requestWithURLString:@"http://www.whereq.com:8079/answer.m"]; 

r.POSTDictionary = @{ @"paperid":@"6", @"q77":"1", @"q80":@"hello" }; 

r.completionBlock = ^(NSDictionary *headers, NSString *body) { 
    // ... 
}; 

r.errorBlock = ^(NSError *error) { 
    // ... 
}; 

[r startAsynchronous]; 
+0

Non va bene perché non è usato postBody, ottieni array sul lato server. Array ( [Q80] => ciao [paperId] => 6 [Q77] => 1 ) Come inviare oggetto senza param name? –