iOS拼接URL,类似安卓body体进行转码(转为gbk)提交。
来源:互联网 发布:mrp格式软件下载 编辑:程序博客网 时间:2024/06/06 17:40
大家都知道,AFN去提交POST的时候是不用给他拼接URL的,但是♪(^∇^*),如果说你要对这个后面的body体进行转码的话,如果不拼接就无法实现了,还有一个就是如果安卓那边url的确是拼接出来的,那么我iOS不拼接的话,只有一个结果。。。那就是请求不到数据咯!
我用一个简单的demo来说一下,如果你要拼接的是数组怎么办,比如我传的是字典对吧:@{@"h":@[@"1",@"2"]},那我想要的结果是http:....../?h=1&h=2,这种形式的,如果直接不做任何处理,显然是不行的。
第一个问题,拼接URL:
拼接方法如下:
#pragma mark - 点击事件
- (IBAction)pinjie:(id)sender {
NSDictionary *para = @{@"1":@[@"发动机异常",@"排气管异常",@"玻璃窗升降慢"],@"2":@"ce",@"3":@[@"测试1",@"测试2"]};
[selfdmsPostWithparaments:[paramutableCopy]];
}
#pragma mark - 拼接字符串
-(void)dmsPostWithparaments:(NSMutableDictionary *)para {
NSMutableString *URL = [NSMutableStringstringWithString:@"http://10.64.109.61:8080/DMSFrameworkWeb/MobileChannelServlet"];
NSMutableArray *paraArray = [NSMutableArraynew];
NSString *postURL =nil;
NSMutableString *arrayStr = [NSMutableStringstring];
//字典转字符串---url
if (para !=nil) {
[paraArray addObject:para];
for (int i = 0; i < paraArray.count; i++) {
NSArray *keys = [paraArray[i]allKeys];
//拼接字符串
for (int j = 0; j < keys.count; j++) {
NSString *string;
if (j == 0) {
//拼接时加?
if ([[paraArray[i]allValues][j] isKindOfClass:[NSArrayclass]]) {
for (int k = 0; k < [[paraArray[i]allValues][j] count]; k++) {
if (k== 0 ) {
string = [NSStringstringWithFormat:@"?%@=%@", keys[j], paraArray[i][keys[j]][k]];
}else{
string = [NSStringstringWithFormat:@"&%@=%@", keys[j], paraArray[i][keys[j]][k]];
}
[arrayStr appendString:string!=nil ?string :@""];
}
}else{
string = [NSStringstringWithFormat:@"?%@=%@", keys[j], paraArray[i][keys[j]]];
[arrayStr appendString:string!=nil ?string :@""];
}
}
else{
// //拼接时加&
if ([[paraArray[i]allValues][j] isKindOfClass:[NSArrayclass]]) {
for (int k = 0; k < [[paraArray[i]allValues][j] count]; k++) {
string = [NSStringstringWithFormat:@"&%@=%@", keys[j], paraArray[i][keys[j]][k]];
[arrayStr appendString:string!=nil ?string :@""];
}
}else{
string = [NSStringstringWithFormat:@"&%@=%@", keys[j], [paraArray[i]allValues][j]];
[arrayStr appendString:string !=nil?string :@"" ];
}
}
//拼接字符串
}
}
}
[URL appendString:arrayStr !=nil ?arrayStr :@""];
postURL = [URL copy];
NSLog(@"所需url:%@",postURL);
}
打印如下所示:
第二个问题,对body体进行转码。
首先要是想对body体进行转码,那肯定就不能用最初的afn--post请求方法,就要用apple自带的原生的请求方法,还有一点,如果用这个方法,上面我拼接好的body体就是arrayStr,在拼接时要把添加进去的?去掉,因为这里其实是不需要这一块的。代码如下:
NSStringEncoding encode =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);//设置编码类型,GBK格式
NSData* postData = [arrayStrdataUsingEncoding:encode]; //将请求参数字符串转成NSData类型
NSMutableURLRequest *request = [[NSMutableURLRequestalloc]init];
[request setHTTPMethod:@"POST"];
//指请求方式
[request setURL:[NSURLURLWithString:[URL stringByAddingPercentEscapesUsingEncoding:encode]]];//设置请求的地址,以设置好的格式编码
[request setHTTPBody:postData]; //设置请求的参数
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperationalloc]initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation,id responseObject) {
{
// 请求成功之后的返回
} failure:^(AFHTTPRequestOperation *operation,NSError *error) {
if ([error.userInfo[@"NSLocalizedDescription"]isEqualToString:@"请求超时。"]) {
[ZHYAlertBlockinitWithTitle:@"网络请求超时或无网络"message:@"请从新登录"cancleButtonTitle:nilOtherButtonsArray:@[@"重新登录"]clickAtIndex:^(NSInteger buttonIndex) {
}];
}elseif ([error.userInfo[@"NSLocalizedDescription"]isEqualToString:@"似乎已断开与互联网的连接。"]){
[ZHYAlertBlockinitWithTitle:@"似乎已断开与互联网的连接。"message:@"请从新登录"cancleButtonTitle:nilOtherButtonsArray:@[@"重新登录"]clickAtIndex:^(NSInteger buttonIndex) {
}];
}else{
[ZHYAlertBlockinitWithTitle:[NSStringstringWithFormat:@"%@",error]message:nilcancleButtonTitle:nilOtherButtonsArray:@[@"OK"]clickAtIndex:^(NSInteger buttonIndex) {
}];
}
}];
[operation start];
转载请附上原文链接,谢谢。
- iOS拼接URL,类似安卓body体进行转码(转为gbk)提交。
- iOS拼接URL,类似安卓body体进行转码(转为gbk)提交。
- LOADRUNNER转码问题(UTF-8转为GBK)
- 安卓QQ,微信分享URL后面拼接参数
- IOS 实现类似安卓的Toast
- IOS 拼接URL的方法
- IOS 拼接参数与URL
- Java 字符转码之UTF-8转为GBK/GB2312
- URL拼接的转码问题
- ios GBK国标转码
- gbk转为utf-8|或utf-8转gbk
- iOS 实现类似安卓.9.png图片拉伸效果
- ios XCODE url 拼接返回为空
- 解决中文拼接在url后的乱码问题--gbk 在url上的编码
- form 表单提交 拼接url发送到后台
- GBK编码,解码。以及,有关url中文转码!
- iOS gbk 转utf
- iOS Swift3.0 UIWebView获取HTML(title,url,body...) stringByEvaluatingJavaScript
- Playmaker人物高级控制教程
- .so导入Bug
- JAVA进阶4.12——泛型
- 索引
- 工厂方法模式
- iOS拼接URL,类似安卓body体进行转码(转为gbk)提交。
- 为什么中国的程序员总被称为码农?
- View.MeasureSpec
- python之函数参数传递
- 网站的一些状态提示
- lvs为何不能完全替代DNS轮询
- IOS开发记录用户登录状态
- Ceres-Solver库使用(一)--windows下安装配置
- leetcode刷题笔记-ZigZag Conversion