如何模拟HTTP表单提交的iOS-objective-c
2个回答
展开全部
模拟HTTP表单提交的iOS-objective-c方法代码:
NSDictionary *user = [[NSDictionary alloc] initWithObjectsAndKeys:@"0", @"Version", nil];
if ([NSJSONSerialization isValidJSONObject:user])
{
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];
NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];
//NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]);
NSURL *url = [NSURL URLWithString:@"http://42.96.140.61/lev_version.php"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];
[request addRequestHeader:@"Accept" value:@"application/json"];
[request setRequestMethod:@"POST"];
[request setPostBody:tempJsonData];
[request startSynchronous];
NSError *error1 = [request error];
if (!error1) {
NSString *response = [request responseString];
NSLog(@"Test:%@",response);
}
}
代码解释:
代码段第一行:
[cpp] view plaincopy
NSDictionary *user = [[NSDictionary alloc] initWithObjectsAndKeys:@"0", @"Version", nil];
构造了一个最简单的字典类型的数据,因为自iOS 5后提供把NSDictionary转换成JSON格式的API。
第二行if判断该字典数据是否可以被JSON化。
[cpp] view plaincopy
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];
这一句就是把NSDictionary转换成JSON格式的方法,JSON格式的数据存储在NSData类型的变量中。
[cpp] view plaincopy
NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];
这一句是把NSData转换成NSMutableData,原因是下面我们要利用ASIHTTPRequest发送JSON数据时,其消息体一定要以NSMutableData的格式存储。
下面一句注视掉的语句
[cpp] view plaincopy
//NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]);
主要作用是记录刚才JSON格式化的数据
下面到了ASIHTTPRequest功能部分:
[cpp] view plaincopy
NSURL *url = [NSURL URLWithString:@"http://xxxx"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
这两句的主要功能是设置要与客户端交互的服务器端地址。
接下来两句:
[cpp] view plaincopy
[request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];
[request addRequestHeader:@"Accept" value:@"application/json"];
是设置HTTP请求信息的头部信息,从中可以看到内容类型是JSON。
接下来是设置请求方式(默认为GET)和消息体:
[cpp] view plaincopy
[request setRequestMethod:@"POST"];
[request setPostBody:tempJsonData];
一切设置完毕后开启同步请求:
[cpp] view plaincopy
[request startSynchronous];
最后的一段:
[cpp] view plaincopy
if (!error1) {
NSString *response = [request responseString];
NSLog(@"Rev:%@",response);
}
是打印服务器返回的响应信息。
NSDictionary *user = [[NSDictionary alloc] initWithObjectsAndKeys:@"0", @"Version", nil];
if ([NSJSONSerialization isValidJSONObject:user])
{
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];
NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];
//NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]);
NSURL *url = [NSURL URLWithString:@"http://42.96.140.61/lev_version.php"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];
[request addRequestHeader:@"Accept" value:@"application/json"];
[request setRequestMethod:@"POST"];
[request setPostBody:tempJsonData];
[request startSynchronous];
NSError *error1 = [request error];
if (!error1) {
NSString *response = [request responseString];
NSLog(@"Test:%@",response);
}
}
代码解释:
代码段第一行:
[cpp] view plaincopy
NSDictionary *user = [[NSDictionary alloc] initWithObjectsAndKeys:@"0", @"Version", nil];
构造了一个最简单的字典类型的数据,因为自iOS 5后提供把NSDictionary转换成JSON格式的API。
第二行if判断该字典数据是否可以被JSON化。
[cpp] view plaincopy
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];
这一句就是把NSDictionary转换成JSON格式的方法,JSON格式的数据存储在NSData类型的变量中。
[cpp] view plaincopy
NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];
这一句是把NSData转换成NSMutableData,原因是下面我们要利用ASIHTTPRequest发送JSON数据时,其消息体一定要以NSMutableData的格式存储。
下面一句注视掉的语句
[cpp] view plaincopy
//NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]);
主要作用是记录刚才JSON格式化的数据
下面到了ASIHTTPRequest功能部分:
[cpp] view plaincopy
NSURL *url = [NSURL URLWithString:@"http://xxxx"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
这两句的主要功能是设置要与客户端交互的服务器端地址。
接下来两句:
[cpp] view plaincopy
[request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];
[request addRequestHeader:@"Accept" value:@"application/json"];
是设置HTTP请求信息的头部信息,从中可以看到内容类型是JSON。
接下来是设置请求方式(默认为GET)和消息体:
[cpp] view plaincopy
[request setRequestMethod:@"POST"];
[request setPostBody:tempJsonData];
一切设置完毕后开启同步请求:
[cpp] view plaincopy
[request startSynchronous];
最后的一段:
[cpp] view plaincopy
if (!error1) {
NSString *response = [request responseString];
NSLog(@"Rev:%@",response);
}
是打印服务器返回的响应信息。
推荐于2016-01-22
展开全部
我AFNetworking,需要提交表单(POST)向服务器发出请求。下面是服务器所期望的一个示例:<form id="form1" method="post" action=" CodeGo.net
<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>
我的multipartFormRequestWithMethod在AFHTTPClient作用,就像是在发送后的一个以上的图像AFNetworking。但我不知道如何与“广播”式的输入值追加表单数据。
本文地址 :CodeGo.net/509228/
-------------------------------------------------------------------------------------------------------------------------
1. 下面是一个NSURLConnection的发送POST// Note that the URL is the "action" URL parameter from the form.
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL @" CodeGo.net
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x- CodeGo.net 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];
2. 如果你看看什么样的浏览器提交到服务器这种形式(使用调试面板在浏览器中),你会看到你的POST请求的数据看起来像这样:paperid=6&q77=2&q80=blah
这是从选定的单选按钮,作为相应的POST项的值的值项,你会得到所有的单选按钮只有一个条目。 (相对于切换按钮,你在哪里得到的每个当前选定的值。) 一旦你理解了POST字符串的格式,你应该能够在ASIFormDataRequest创建请求。
3. 下面是如何做STHTTPRequestSTHTTPRequest *r = [STHTTPRequest requestWithURLString:@" CodeGo.net
r.POSTDictionary = @{ @"paperid":@"6", @"q77":"1", @"q80":@"hello" };
r.completionBlock = ^(NSDictionary *headers, NSString *body) {
// ...
};
r.errorBlock = ^(NSError *error) {
// ...
};
[r startAsynchronous];
<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>
我的multipartFormRequestWithMethod在AFHTTPClient作用,就像是在发送后的一个以上的图像AFNetworking。但我不知道如何与“广播”式的输入值追加表单数据。
本文地址 :CodeGo.net/509228/
-------------------------------------------------------------------------------------------------------------------------
1. 下面是一个NSURLConnection的发送POST// Note that the URL is the "action" URL parameter from the form.
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL @" CodeGo.net
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x- CodeGo.net 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];
2. 如果你看看什么样的浏览器提交到服务器这种形式(使用调试面板在浏览器中),你会看到你的POST请求的数据看起来像这样:paperid=6&q77=2&q80=blah
这是从选定的单选按钮,作为相应的POST项的值的值项,你会得到所有的单选按钮只有一个条目。 (相对于切换按钮,你在哪里得到的每个当前选定的值。) 一旦你理解了POST字符串的格式,你应该能够在ASIFormDataRequest创建请求。
3. 下面是如何做STHTTPRequestSTHTTPRequest *r = [STHTTPRequest requestWithURLString:@" CodeGo.net
r.POSTDictionary = @{ @"paperid":@"6", @"q77":"1", @"q80":@"hello" };
r.completionBlock = ^(NSDictionary *headers, NSString *body) {
// ...
};
r.errorBlock = ^(NSError *error) {
// ...
};
[r startAsynchronous];
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询