如何在iOS上模拟HTTP表单(POST)提交

我正在使用AFNetworking框架,需要向服务器提交表单(POST)请求。 以下是服务器期望的示例:

我考虑在AFHTTPClient中使用multipartFormRequestWithMethod,就像在post中使用AFNetworking发送多个图像时所讨论的那样 。 但我不知道如何使用“radio”类型输入值附加表单数据。

以下是使用NSURLConnection发送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]; 

如果您在使用此表单(使用浏览器中的调试面板)时查看浏览器提交给服务器的内容,您会看到POST请求数据如下所示:

 paperid=6&q77=2&q80=blah 

也就是说,所选单选按钮的值条目用作相应POST条目的值,并且您只获得所有单选按钮的一个条目。 (与切换按钮相反,您可以在其中获取当前所选每个的值。)

一旦理解了POST字符串的格式,就应该能够使用ASIFormDataRequest以通常的方式创建请求。

以下是如何处理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];