如何使用 python3 通过 SSL 进行 BasicAuth REST 查询

How do I make a BasicAuth REST query over SSL with python3

我有一个 tornado 服务器充当 iPhone 应用程序的 REST 接口。我想使用 python 程序对所述服务器进行一些查询。在 iOS 方面,我使用的是 AFNetworking 库。但我不知道 python 客户端的类似物是什么。

我的 ObjectiveC/AFNetworking 代码类似于:

+ (HttpConnection*) current {
    static HttpConnection* current = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        current = [[self alloc] initWithBaseURL: [NSURL URLWithString: BaseURL]];
        current.securityPolicy.allowInvalidCertificates = YES;
        current.responseSerializer = [AFJSONResponseSerializer serializer];
        current.requestSerializer = [AFJSONRequestSerializer serializer];
    });
    [current.requestSerializer setAuthorizationHeaderFieldWithUsername: Username password: Password];
    return current;
}

- (void)pull: (NSString*)resource fields: (NSArray*)fields then: (void(^)())block {
    //  NSLog(@"%@ pulling...", self);
    NSString* uri = [NSString stringWithFormat: @"%@/%@", [self rootREST], self.serialID];
    if (resource) {
        uri = [NSString stringWithFormat: @"%@/%@", uri, resource];
    }
    [[HttpConnection current]
        GET: uri
        parameters: fields ? @{@"fields": fields} : nil
        success:^(NSURLSessionDataTask* task, id responseObject){
            [self performSelectorOnMainThread: @selector(fromDoc:) withObject:responseObject waitUntilDone:YES];
            if (block) block();
        }
        failure:^(NSURLSessionDataTask* task, NSError* error){
            NSLog(@"%@ pull error: %@ (uri=%@)", self, error, uri);
        }
    ];
}

所以我正在寻找的功能是:

  1. 使用类似 https://a.b.c:7895/
  2. 的 BaseURL 进行初始化
  3. 添加resource/path
  4. 允许无效(自签名)证书
  5. 设置BasicAuthheader
  6. 向查询添加其他参数
  7. 运行 GET 请求

我是否使用 urllib 来完成所有这些?还是我需要使用不同的东西。我很想举个例子来说明如何做到这一点。

我强烈推荐 python 请求库(我确实检查过它,它确实支持 python 3.x)。它应该很简单:

import requests
username = "SomeUser"
password = "SomePass"
r = requests.get("https://a.b.c:7895/resource/path?param1=foo",auth=(username,password),verify=False)