2009-04-24 8 views
13

Estoy enviando una publicación usando NSURLRequest.NSURLRequest - URL de codificación para NSURLRequest Cuerpo POST (iPhone objetivo-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]]; 

Dentro del cuerpo de la Solicitud estoy codifican la siguiente NVP:

ReturnURL = http://someSite.com

El puesto está atravesando con éxito, pero me da un error de vuelta. El error indica una url no válida.

Por lo tanto, lo cambié a:

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

con el mismo error.

También lo he comprobado con el cliente HTTP de Todd Ditchendorf, con los mismos resultados.

Sé que debo estar codificando esto mal ¿alguien me puede decir lo que estoy haciendo mal?

Gracias Corey

** ACTUALIZACIÓN: Gracias a los que respondieron. Me perdí un signo y en mis valores de NVP. Entonces, por supuesto, tan pronto como lo arreglé, todo estaba bien. Lo que sospechaba, la codificación de una url en el cuerpo de la publicación era incorrecta. No estoy usando el marco ASIHTTPRequest, pero me ayudó a solucionar el problema (exceso de lo que necesitaba). **

Respuesta

15

considerar el uso de marco de Ben Copsey ASIHTTPRequest para generar y enviar solicitudes htttp sincrónicas y asincrónicas (POST y 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]; 

Su marco es un gran ahorro de tiempo.

+1

ASIHttpRequest es increíble! – bentford

4

No sé si esto resuelve su problema, pero

[parameterString length] 

menudo no es ser igual a la longitud de

[parameterString dataUsingEncoding:NSUTF8StringEncoding] 

porque UTF8 codifica caracteres con número de bytes variable.

Cuestiones relacionadas