iOS中webView的post请求去访问https

前段时间遇到了一个问题花了一段时间去解决,其主要涉及到webview的post请求和https访问以及GBK和URL编码

最后解决方案如下:

1.POST请求的写法

 NSURL *url = [NSURL URLWithString:_url];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL: url];

    [request setHTTPMethod: @"POST"];

    NSString *body = [NSString stringWithFormat:@"sign=%@&orig=%@&returnurl=%@&NOTIFYURL=%@",_dic[@"params"][@"sign"],_dic[@"params"][@"orig"],_dic[@"params"][@"returnurl"],_dic[@"params"][@"NOTIFYURL"]];

[request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];

 [_webView loadRequest: request];

2.访问HTTPS


由于访问https需要涉及到信任网站的问题,否则会报8013错误,使用了以下方法:

#import <Foundation/Foundation.h>


@interface NSURLRequest (SSL)

+(BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host;


+(void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;

@end


#import "NSURLRequest+SSL.h"


@implementation NSURLRequest (SSL)

+(BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host

{

    return YES;

}


+(void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host

{

    

}


@end


在需要使用的使用的webview的地方加上以下代码:

导入#import "NSURLRequest+SSL.h"后,

 [NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:@"https"];


这就解决了  无论是webview去加载https网页还是web view内去请求https的问题

3.由于当时需要对post进行URL编码/GBK编码  当时就使用了一下方法:

 NSString *body = [NSString stringWithFormat:@"sign=%@&orig=%@&returnurl=%@&NOTIFYURL=%@",[self encodeString:_dic[@"params"][@"sign"]]  ,[self encodeString:_dic[@"params"][@"orig"]],[self encodeString:_dic[@"params"][@"returnurl"]],[self encodeString:_dic[@"params"][@"NOTIFYURL"]]];

    unsigned long encode = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingHZ_GB_2312);//GBK编码

    

    [request setHTTPBody:[body dataUsingEncoding:encode]];


//URL编码

-(NSString*)encodeString:(NSString*)unencodedString{

    NSString *encodedString = (NSString *)

    CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,

                                                              (CFStringRef)unencodedString,

                                                              NULL,

                                                              (CFStringRef)@"!*'();:@&=+$,/?%#[]",

                                                              kCFStringEncodingUTF8));

    

    return encodedString;

}






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章