我想允许无效的SSL证书。 我的主要代码如下:
myClient = [[MyClient alloc] init];
[myClient getHtml:@"/path/to/the/distination.html"];
该MyClient类代码如下:
#import <Foundation/Foundation.h>
#import "AFNetworking.h"
@interface MyClient : NSObject
- (void)getHtml:(NSString *)path;
@end
#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_
@implementation MyClient
- (void)getHtml:(NSString *)path
{
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"https://trusted.server.net"]];
[httpClient getPath:path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error = %@", error);
}];
}
@end
我阅读页面下方,并试图宏观但这不起作用。
自签名证书的SSL·问题#189·AFNetworking / AFNetworking https://github.com/AFNetworking/AFNetworking/issues/189
请帮我...
Answer 1:
为了让无效的SSL证书AFNetworking。 添加下面一行在下面#进口Availability.h AFURLConnectionOperation.h
#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ 1
Answer 2:
在AFNetworking 2.0,可以使用以下命令:
[AFHTTPRequestOperationManager manager].securityPolicy.allowInvalidCertificates = YES;
Answer 3:
您现在可以使用AFHTTPClient的allowsInvalidSSLCertificate财产。 无需使用定义AFNetworking的最新版本。
AFHTTPClient* client = [AFHTTPClient clientWithBaseURL:@"url"];
client.allowsInvalidSSLCertificate = YES; //this defaults to no
Answer 4:
我使用RestKit所以
client.allowsInvalidSSLCertificate = YES;
不工作。 该选项不会传播到由restkit创建的操作。
我使用的CocoaPods所以在PCH文件或荚项目中的任何更改都会覆盖。 该“黑客”我一直在使用一个cocoapod安装后运行,增加了所需的预处理器定义。 在我荚文件的末尾我已经加入:
post_install do |installer_representation|
installer_representation.project.targets.each do |target|
if target.name == 'Pods-AFNetworking'
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << '_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1'
end
end
end
end
Answer 5:
请注意,如果您通过的CocoaPods安装, #define
你的项目-ing这个宏是不够的-编译器宏必须为了让它生效编译静态库时设置。
Answer 6:
下面是如何使用的经理POST操作做到这一点。
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //initialize
manager.securityPolicy.allowInvalidCertificates=YES; //allow unsigned
manager.responseSerializer=[AFJSONResponseSerializer serializer]; //set up for JSOn
[manager POST:@"myweb.com" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
//success stuff
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//error stuff
}];
编辑 - SWIFT版本:
var securityPolicy = AFSecurityPolicy()
securityPolicy.allowInvalidCertificates = true;
manager.securityPolicy = securityPolicy;
manager.POST(
"https://exmaple.com/foobar.php",
nil,
...
Answer 7:
你应该继承的AFHttpClient和override
- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;
这是我的代码。
- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)urlRequest success:(void (^)(AFHTTPRequestOperation *, id))success failure:(void (^)(AFHTTPRequestOperation *, NSError *))failure
{
AFHTTPRequestOperation *operation = [super HTTPRequestOperationWithRequest:urlRequest success:success failure:failure];
[operation setAuthenticationAgainstProtectionSpaceBlock:^BOOL(NSURLConnection *connection, NSURLProtectionSpace *protectionSpace) {
return YES;
}];
[operation setAuthenticationChallengeBlock:^(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge) {
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}
}];
return operation;
}
您使用此HttpClient的,它可以成功地访问自签名网站。
Answer 8:
我在我的代码扩展AFHTTPSessionManager。 当对一个测试服务器测试,所有我需要的是添加这样一行:
mySessionManager.securityPolicy.allowInvalidCertificates = YES;
Answer 9:
AFHTTPRequestOperation *操作= [[AFHTTPRequestOperation的alloc] initWithRequest:的URLRequest]; operation.securityPolicy.allowInvalidCertificates = YES;
Answer 10:
如果您正在使用RestKit使用
client.allowsInvalidSSLCertificate = YES;
将无法正常工作,而不是这样做:
在你的项目中,点击RestKit.xcodeproj转到项目>构建设置>预处理宏
并添加_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1
这就是结束。
Answer 11:
这是与AFNetworking allowign无效的SSL证书的最佳方法。
使用添加_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_到
项目>构建设置>预处理宏并将其添加到调试进入。
希望能帮助到你
Answer 12:
如果您正在使用RestKit使用
client.allowsInvalidSSLCertificate = YES;
将无法正常工作,而不是这样做:
如果您手动添加其余套件到您的项目,点击RestKit.xcodeproj转到项目>构建设置>预处理宏
并添加_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1
这就是结束。
Answer 13:
我遇到了同样的问题,而且我读作品的解决方案的任何人。
对我来说,唯一的解决方法是这样设置AFSecurityPolicy:
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
securityPolicy.allowInvalidCertificates = YES;
manager.securityPolicy = securityPolicy;
我决定回答虽然问题是旧的,也许可以帮助别人。
文章来源: I want to allow invalid SSL certificates with AFNetworking