// 发送登录请求
NSURL *loginURL = [[NSURLalloc]initWithString:@"http://baidu.com/a0/user/auth"];
//1.创建request
NSURLRequest *request = [NSURLRequestrequestWithURL:loginURL];
//2.创建一个 NSMutableURLRequest添加 header
NSMutableURLRequest *mutableRequest = [requestmutableCopy];
[mutableRequest setHTTPMethod:@"POST"];
NSString *value = [NSStringstringWithFormat:@"{\"uname\":\"%@\",\"passwd\":\"%@\"}",userTF.text,passwordTF.text];
//[mutableRequest addValue:value forHTTPHeaderField:@"Content-Type"];
[mutableRequest setValue:@"application/json"forHTTPHeaderField:@"Content-Type"];
[mutableRequest setHTTPBody:[valuedataUsingEncoding:NSUTF8StringEncoding]];
//3.把值覆给request
request = [mutableRequest copy];
//4.查看请求头
NSLog(@"value = %@\nrequest.allHTTPHeaderFields = %@\n request.HTTPBody = %@",value, request.allHTTPHeaderFields,[request.HTTPBodybase64Encoding]);
//5.获取请求数据
NSHTTPURLResponse* urlResponse = nil;
NSError *error = [[NSErroralloc] init];
NSData *responseData = [NSURLConnectionsendSynchronousRequest:request returningResponse:&urlResponse error:&error];
NSMutableString *result = [[NSMutableStringalloc] initWithData:responseDataencoding:NSUTF8StringEncoding];
NSLog(@"The result string is :%@",result);
PS:HttpHeader的contentType设置
ajax开发中在请求服务器端的响应时, 对于每一种返回类型 规范的做法是要在服务端指定response的contentType 的. (当然 不指定绝大多数情况下也没什么问题 尤其是返回"非xml"的时候) 。
常遇到下面的几种情况:
1、 服务端需要返回一段普通文本给客户端,Content-Type="text/plain"
2 、服务端需要返回一段HTML代码给客户端 ,Content-Type="text/html"
3 、服务端需要返回一段XML代码给客户端 ,Content-Type="text/xml"
4 、服务端需要返回一段javascript代码给客户端
5 、服务端需要返回一段json串给客户端
javascript 的 contentType 按最标准的写法 应该是 application/javascript。而常用的 text/javascript 已经被 rfc定义为废弃的。
但是 在这里暂时不建议使用 application/javascript . 大家还是继续使用 text/javascript 为好. 因为很多老旧浏览器并不支持 application/javascript . 而所有浏览器都支持text/javascript. 在标准和广泛的兼容性之间 还是暂且选择后者吧。
json 的 contentType 常见写法有 : text/json & text/javascript .
但是 这个 text/json 其实是根本不存在的, 而 text/javascript 在有些时候客户端处理起来会有歧义. 对于json的contentType , rfc里定义的标准写法是 :application/json.
在这里毫无疑问 我们应该选择标准写法的 application/Json。
@的使用
基本使用
- "@123456"表示输出123456到页面
- "@中文english"表示输出"中文english"到页面
规范化contentType
- "@json:xxxx"、"@applicaiton/x-json:xxxx"表示输出content-type为application/x-json的xxx字符串到客户端
- "@xml:xxxx"、"@application/xml:xxxx" 表示输出content-type为application/xml的xxxx字符串到客户端
- "@plain:xxxx"、"@text:xxxxx"、"@text/plain:xxxxx" 表示输出content-type为text/plain的字符串到客户端
- "@xxxxx"、"@html:xxxx"、"@text/html:xxxxx" 表示输出content-type为text/html的字符串到客户端
我们支持以下Content-Type:json、xml、html、plain、text、所有以text/开始的,比如text/html、text/plain、text/javascript等;所有以application/开头的,比如applicaton/x-json等,其他的概不支持。
可以加;charset=UTF-8等修饰
- "@json:xxxx;charset=UTF-8"、"@applicaiton/x-json:xxxx;charset=UTF-8"表示输出content-type为application/x-json;charset=UTF-8的xxx字符串到客户端
技巧
- "@text/plain:json:xxxxx"、"@plain:json:xxxxx"、"@text:json:xxxxx"表示输出content-type为text/plain的"json:xxxxx"到客户端
//****
HTTPBody为XML的时候:
NSMutableData *postBody = [NSMutableData data];
[postBody appendData:[[NSString stringWithFormat:@"<Request Action=\"Login\">"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"<Body>"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"<Username>wangjun</Username>"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"<Password>password</Password>"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"<PlatformID>2</PlatformID>"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"<PlatformVersion>3.1.3</PlatformVersion>"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"<TaskViewerName>IP 1.3</TaskViewerName>"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"<TaskViewerVersion>3</TaskViewerVersion>"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"</Body>"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"</Request>"] dataUsingEncoding:NSUTF8StringEncoding]];
//post
[request setHTTPBody:postBody];
*****//
---------------------------------------------
二 AFHTTPRequestOperationManager 设置
AFHTTPRequestOperationManager 设置比较简单
|
1
2
3
4
5
6
7
8
|
//1.获取一个管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
//2.得到令牌
NSString *value = [NSString stringWithFormat:@
"Bearer %@"
,[BZUserTool readToken]];
//3.设置
[mgr.requestSerializer setValue:value forHTTPHeaderField:@
"Authorization"
];
|
本文介绍了在iOS开发中如何使用NSURLRequest和NSMutableURLRequest进行数据请求,包括设置HTTP方法、Header和Body。重点讲解了JSON内容类型的设置,并提到了 contentType 的规范化和浏览器兼容性问题。同时,文章提及了HTTPBody为XML的数据构造方法,以及AFHTTPRequestOperationManager的简单应用。
4868

被折叠的 条评论
为什么被折叠?



