使用两个不同的 baseUrl - AFHTTPSessionManager

Posted

技术标签:

【中文标题】使用两个不同的 baseUrl - AFHTTPSessionManager【英文标题】:Working with two different baseUrl - AFHTTPSessionManager 【发布时间】:2014-07-15 05:44:47 【问题描述】:

我正在使用 AFHTTPSessionManager 在网络上进行 api 调用。我有会话管理器的 signleton 对象,它会启动一次基本 url。有时,我需要使用不同的 baseurl 进行 api 调用。并且它在 AFNetworking.h 文件中是只读的。

在这里处理不同的baseurl的正确方法是什么?请帮忙。

+ (ApiClient *)sharedClient 

    static ApiClient *_sharedClient = nil;

    static dispatch_once_t oncePredicate;

    dispatch_once(&oncePredicate, ^
        _sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:kTraktBaseURLString]];
    );
    return _sharedClient;

【问题讨论】:

我通常使用绝对 URL,在这种情况下 baseURL 被忽略 你找到解决办法了吗? 还没有。我使用两个不同的类。 我也希望有办法改变 baseUrl。 【参考方案1】:

您可以使用+URLWithString:relativeToURL: 方法的行为来覆盖baseURL。

马特mentioned it in Docs

对于 HTTP 便利方法,请求序列化程序从相对于 baseURL 的路径构造 URL,使用 NSURL +URLWithString:relativeToURL:,如果提供。如果 baseURL 为 nil,则 path 需要使用 NSURL +URLWithString: 解析为有效的 NSURL 对象。

下面是几个 baseURL 和相对路径如何交互的示例:

NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"];
[NSURL URLWithString:@"foo" relativeToURL:baseURL];                  //  http://example.com/v1/foo
[NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL];          // http://example.com/v1/foo?bar=baz
[NSURL URLWithString:@"/foo" relativeToURL:baseURL];                 // http://example.com/foo
[NSURL URLWithString:@"foo/" relativeToURL:baseURL];                 // http://example.com/v1/foo
[NSURL URLWithString:@"/foo/" relativeToURL:baseURL];                // http://example.com/foo/
[NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/

因此,如果您想更改单个请求的 baseURL,您可以将绝对 URL 作为 URLString 参数传递给 GET:parameters:success:failure:,而不是 URL 路径。

[manager GET:@"http://otherBaseURL.com/url/path" parameters:nil success:... failure:...]

【讨论】:

以上是关于使用两个不同的 baseUrl - AFHTTPSessionManager的主要内容,如果未能解决你的问题,请参考以下文章

vue中使用axios给生产环境和开发环境配置不同的baseUrl

vue中使用axios给生产环境和开发环境配置不同的baseUrl

使用 axios 和 nuxt 进行服务器和客户端 API 调用的不同 baseURL

使用 RestKit 0.2x 创建两个独立的持久存储

UIWebView:链接到包中的文件并设置 baseURL

Vue 环境变量和模式(设置通用baseUrl)