使用两个不同的 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