如何使用 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);
}
];
}
所以我正在寻找的功能是:
- 使用类似
https://a.b.c:7895/
的 BaseURL 进行初始化
- 添加
resource/path
- 允许无效(自签名)证书
- 设置
BasicAuth
header
- 向查询添加其他参数
- 运行 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)
我有一个 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);
}
];
}
所以我正在寻找的功能是:
- 使用类似
https://a.b.c:7895/
的 BaseURL 进行初始化
- 添加
resource/path
- 允许无效(自签名)证书
- 设置
BasicAuth
header - 向查询添加其他参数
- 运行 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)