2009-04-24 14 views
13

Sto inviando un post utilizzando NSURLRequest.NSURLRequest - codifica l'url per NSURLRequest POST Body (iPhone-obiettivo-C)

NSURL *url = [NSURL URLWithString:someUrlString]; 
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 
NSString *msgLength = [NSString stringWithFormat:@"%d", [parameterString length]]; 
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; 
[theRequest setHTTPMethod:@"POST"]; 
[theRequest setHTTPBody: [parameterString dataUsingEncoding:NSUTF8StringEncoding]]; 

All'interno del corpo della richiesta che sto codifica il seguente NVP:

ReturnURL = http://someSite.com

Il post sta attraversando con successo, ma ottengo un errore di nuovo. L'errore indica un url non valido.

Così, ho cambiato in:

ReturnURL = http:% 2F% 2FsomeSite.com

con lo stesso errore.

Ho anche verificato due volte con il client HTTP di Todd Ditchendorf, con gli stessi risultati.

So che devo codificare questo torto qualcuno può dirmi che cosa sto facendo male?

Grazie Corey

** AGGIORNAMENTO: Grazie a coloro che hanno risposto. Ho perso una e commerciale nei miei valori NVP. Quindi, ovviamente, non appena l'ho risolto, andava tutto bene. Ciò che sospettavo, la codifica di un url nel corpo del post non era corretta. Non sto utilizzando il framework ASIHTTPRequest, ma mi ha aiutato a risolvere il problema (eccessivo utilizzo di ciò di cui avevo bisogno). **

risposta

15

considerare l'utilizzo di framework di Ben Copsey ASIHTTPRequest per la generazione e l'invio di richieste htttp sincroni e asincroni (POST e GET):

ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:@"http://someSite.com"] autorelease]; 
[request setPostValue:@"myValue1" forKey:@"myFormField1"]; 
[request setPostValue:@"myValue2" forKey:@"myFormField2"]; 
// etc. 
[request start]; 
NSError *error = [request error]; 
if (!error) 
    NSString *response = [request responseString]; 

Il suo quadro è un enorme risparmio di tempo.

+1

ASIHttpRequest è davvero fantastico !! – bentford

4

Non so se questo risolve il problema, ma

[parameterString length] 

non è spesso pari alla lunghezza della

[parameterString dataUsingEncoding:NSUTF8StringEncoding] 

perché UTF8 codifica caratteri con un numero di byte variabile.

Problemi correlati