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;

}






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