为了账号安全,请及时绑定邮箱和手机立即绑定

AFNetworking 和授权头

AFNetworking 和授权头

Go
蛊毒传说 2021-08-23 17:32:23
我是 AFNetworking 的新手,我正在尝试使用它来与我用 Go 编写的 API 对话。我很难让 Authorization 标头工作。我已经子类化了 AFHTTPSessionManager 并将其配置如下+ (HMAPIClient *)sharedHMAPIClient{    static HMAPIClient* _sharedHMAPIClient = nil;    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        _sharedHMAPIClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:HMBaseURL]];    });    return _sharedHMAPIClient;}- (instancetype)initWithBaseURL:(NSURL *)url{    self = [super initWithBaseURL:url];    if (self) {        self.responseSerializer = [AFJSONResponseSerializer serializer];        self.requestSerializer = [AFJSONRequestSerializer serializer];        [self.requestSerializer setAuthorizationHeaderFieldWithUsername:RegistrationAPIKey                                                               password:@"Doesn't matter what goes here."];    }    return self;}- (void)hitTestEndpoint{    [self GET:@"testEndpoint" parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {        NSLog(@"%@", responseObject);    } failure:^(NSURLSessionDataTask *task, NSError *error) {        NSLog(@"%@", error);    }];}当我调用 -(void)hitTestEndpoint 时,我在服务器日志中看到以下标头(缺少授权):Key: Accept-Encoding Value: [gzip, deflate]Key: Connection Value: [keep-alive]Key: Accept-Language Value: [en;q=1]Key: User-Agent Value: [TestApp/2 (iPad Simulator; iOS 8.1; Scale/2.00)]Key: Accept Value: [*/*]为了进行比较,当我使用以下 curl 命令到达相同的端点时,curl https://api.example.com/v1/testEndpoint/ -u test_xqzwjcasogptbnpa:我看到以下标题:Key: Authorization Value: [Basic eHF6d2pjYXNvZ3B0Ym5wYTo=]Key: User-Agent Value: [curl/7.30.0]Key: Accept Value: [*/*]有人可以指出我正确的方向吗?-谢谢更新: 我添加了 AFNetworkActivityLogger 以便我可以看到每个请求。确实包含了 Authorization 标头。此外,我尝试点击http://headers.jsontest.com,它返回从客户端收到的 HTTP 请求标头。授权头是存在于该输出。所以,问题一定出在我的服务器上。我已经记录了每个请求的所有标头,但我不确定还能在哪里查看。要用 Go 标记这个问题,看看是否有人有想法。
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

您显示的服务器日志看起来像 Go 已经解析它们之后的标头。查看 Go 收到的原始纯文本 HTTP 标头会很有帮助。这会告诉你 Go 是否忽略了标头,或者上游是否正在剥离它。

编辑:不知道为什么 Go 会Authorization在给你所谓的原始请求之前去掉标题。但我认为Authorization标头通常只有在发出先前未经授权的请求并从带有WWW-Authenticate标头的服务器获得 401 响应后才由客户端发送。由于听起来您的客户端正在Authorization突然发送标头,因此 Go 服务器 API 可能会忽略并剥离标头,因为它从未要求客户端发送它。

如果您只想在每个请求上发送一个简单的 auth 令牌,那么如果您只是使用一个虚构的X-标头来代替,因为您表示您设置的其他标头可以正常到达怎么办?


查看完整回答
反对 回复 2021-08-23
  • 1 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信