文档章节

注册登陆时动态获取Host IP

 征的一般般
发布于 2015/08/24 22:22
字数 594
阅读 211
收藏 3

当我们要AFNetWorking获取注册登陆网址时,有些时候会发现Host 提供的是一个动态IP,每次所获取的网址都不相同,特意封装了一个获取IP的方法

#import <Foundation/Foundation.h>
#import "FQinterface.h"
#import "AFNetworking.h"
/**
 这是一个用来封装这个项目网络请求的类别
 */
@interface AFHTTPRequestOperationManager (QFPKRequest)




/**
对AFNetworking请求的进一步封装
在请求之前,会先拿到服务器的ip,如果没有ip,就在这个请求之前,先去请求ip,然后才会进行这次请求
这个函数的参数和AFNetworking的参数一致
*/
- (AFHTTPRequestOperation *)GETRequest:(NSString *)URLString
                            parameters:(id)parameters
                               success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                               failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;


/**
 对请求操作的进一步封装,使控制器里的请求的代码更简洁
 */
+ (AFHTTPRequestOperation *)GETRequest:(NSString *)URLString
                            parameters:(id)parameters
                               success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                               failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;

@end


#import "FQNetwork.h"

static NSString *hostIP = nil;

@implementation AFHTTPRequestOperationManager (QFPKRequest)

- (AFHTTPRequestOperation *)GETRequest:(NSString *)URLString parameters:(id)parameters success:(void (^)(AFHTTPRequestOperation *, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *, NSError *))failure
{
    AFHTTPRequestOperation *operation = nil;
    // 如果没有ip就先去请求ip,如果有ip就拼接成完整的路径
    if (hostIP == nil) {
        
        // 先去请求ip,拿到ip之后再去做实际的请求
        operation = [self getHostIPCompletion:^ {
            
            // 调用AFNetworking原本的请求方法
            NSString *fullURL = [NSString stringWithFormat:@"http://%@:80%@", hostIP, URLString];
            NSLog(@"%@", fullURL);
            [self GET:fullURL parameters:parameters success:success failure:failure];
        }];
    }
    else {  // 如果ip已经存在
        
        // 调用AFNetworking原本的请求方法
        NSString *fullURL = [NSString stringWithFormat:@"http://%@:80%@", hostIP, URLString];
        NSLog(@"fullURL = %@", fullURL);
        operation = [self GET:fullURL parameters:parameters success:success failure:failure];
    }
    
    return operation;
}


+ (AFHTTPRequestOperation *)GETRequest:(NSString *)URLString parameters:(id)parameters success:(void (^)(AFHTTPRequestOperation *,id responseObject))success failure:(void (^)(AFHTTPRequestOperation *, NSError *))failure
{
    // 下载数据
    AFHTTPRequestOperationManager *requestManager = [AFHTTPRequestOperationManager manager];
    
    return [requestManager GETRequest:URLString parameters:parameters success:success failure:failure];
}


- (AFHTTPRequestOperation *)getHostIPCompletion:(void (^)(void))completion
{
    AFHTTPRequestOperationManager *requestManager = [AFHTTPRequestOperationManager manager];
    requestManager.responseSerializer = [AFHTTPResponseSerializer serializer];
    return [requestManager GET:URL_HOSTIP parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        
        // 把二进制数据转成文本
        NSString *responseText = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        
        // 保存IP
        hostIP = responseText;
        
        completion();
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        
        completion();
        NSLog(@"get host ip error: %@", error);
    }];
}

@end

这个方法是封装在AFNetWorking中

图中标记的部分需要通过IP网址来获取IP,一般都会由服务端提供

文件导入后就可以用下面的方法来进行注册或者登陆解析

- (void)RequestWeb
{
    

    //参数
    NSDictionary *params = @{@"user_id": @"0",
                             @"is_traditional": @"0",
                             @"page": @"1",
                             @"pageRecord": @"3",
                             @"phonetype": @"1",};
    [AFHTTPRequestOperationManager GETRequest:URL_COOKBOOK parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
       
        //  打印服务器返回的数据
        NSLog(@"%@",operation.responseObject);
    
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//        NSLog(@"%@",error);
    }];

}



© 著作权归作者所有

粉丝 0
博文 7
码字总数 856
作品 0
郑州
私信 提问
mod_rpaf , 令 Nginx 后端的 Apache  获取到互联网 IP。

自从Nginx出现以后,我们都喜欢让 Nginx 跑在前方处理静态文件,然后通过 proxy 把动态请求过滤给 apache。 这么有个问题,跑在后方 apache 上的应用获取到的IP都是Nginx所在服务器的IP ,或...

范堡
2009/06/17
1K
1
[转] VirtualBox怎么设置Host-Only方式连接网络

笔记本通过无线方式连接网络;下面就带大家看看怎么通过HostOnly方式访问网络! 1. 安装VirtualBox 2.先看看目前本地的网络和internet的网络连接 目前有一个Virtual Host-Only Network #5,这...

zxcgzq
02/28
13
0
Nagios微信报警

下面是具体的操作步骤 一.注册微信公众平台。注册地址https://mp.weixin.qq.com/ 二.下载nodejs程序,在程序config/config.coffee中填写刚注册的公众号和密码。 启用程序(nodejs的启动很简单...

mit-tony
2014/02/17
0
0
Mac系统之 ---- 解决stackoverflow打开缓慢和样式错乱

最近开StackOverflow很慢,而且刷出来多半没样式。猜测是CSS被墙了,用Chrome Network一看果然如此。 先以为是DNS污染之类的惯用招式,上VPN后再ping cdn.sstatic.net 发现得到的是同一个IP,...

Ethan-GOGO
2015/05/10
875
1
网站用户身份标识的识别

用户分析是网站分析中一个重要的组成部分,在分析用户之前我们必须首先能够识别每个用户,分辨哪些是”New Customer”,哪些是”Repeat Customer”。这样不但能够更加清晰地了解到底有多少用...

小木头的冬天
2016/09/08
64
0

没有更多内容

加载失败,请刷新页面

加载更多

DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
54分钟前
3
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
今天
4
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
今天
6
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
今天
5
0
Python机器学习之数据探索可视化库yellowbrick

背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维。陆续使用过plotly、seaborn,...

yeayee
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部