2012-09-30 23 views
9

Estoy utilizando el marco de AFNetworking y necesito enviar una solicitud de formulario (POST) al servidor. He aquí una muestra de lo que espera del servidor:Cómo simular el formulario HTTP (POST) enviar en 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 utilizando el multipartFormRequestWithMethod en AFHTTPClient, al igual que lo que se discutió en la post Sending more than one image with AFNetworking. Pero no tengo idea de cómo adjuntar los datos del formulario con el valor de entrada del tipo "radio".

+0

Parece que el ejemplo de lo que espera el servidor no vino a través. Además, puedo proporcionar un ejemplo de cómo hacer esto con NSURLConnection si no está enganchado en AFNetworking ... –

+0

hola obuseme, por favor proporcione el ejemplo. No me importa usar NSURLConnection y NSMutableRequest –

+0

que lo resuelvan, no es nada sofisticado, pero agrega algunos parámetros de solicitud POST. –

Respuesta

22

Aquí hay un ejemplo usando NSURLConnection para enviar parámetros 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

Cogí un fragmento de código web que tenía un parámetro de formulario "acción" (como tu ejemplo), un ingreso de "correo electrónico" y otro de "contraseña", establecí mi URL en la URL "acción", luego usé el anterior para agregar los valores de correo electrónico/contraseña (UUEncoded), y ¡wham, funcionó por primera vez! ¡Ojalá pudiera darle el doble de votos! –

+0

¿Qué tal si otros campos son objetos? es decir, NSString * postString = @ "paperid = 6 & q77 = 2 & q80 = blah & obj = ?????"; - ¿Como manejaste esto? –

5

Si se echa un vistazo a lo que el explorador envía al servidor cuando se utiliza este formulario (utilizando el panel de depuración en su navegador) verías que los datos de solicitud POST se ve así:

paperid=6&q77=2&q80=blah 

Esa es la entrada de valor del botón de selección seleccionado que se utiliza como el valor para la entrada POST correspondiente, y se obtiene una sola entrada para todos los botones de opción. (A diferencia de los botones de alternar, donde obtiene un valor para cada uno que esté seleccionado actualmente).

Una vez que comprenda el formato de la cadena POST, podrá crear la solicitud de la manera habitual utilizando ASIFormDataRequest.

2

Aquí es cómo hacer 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

No es bueno porque no se usa postBody, obtén array en el lado del servidor. matriz ( [Q80] => hola [paperid] => 6 [Q77] => 1 ) Cómo enviar objeto sin param name? –

Cuestiones relacionadas