亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS圖片瘦身總結

2019-11-14 18:15:21
字體:
來源:轉載
供稿:網友

前言

最近在公司寫了個小程序來為iOS應用中的圖片瘦身,進而減小APP大小,減少用戶下載時的流量。

瘦身是在一個專門為圖片瘦身的網站進行的。

地址:https://tinypng.com

這個網站提供的接口是基于https協議的,之前沒有怎么用過https協議,現在一并總結一下。

 

關于HTTPS

https協議基礎請參考參考:

HTTPS的七個誤解

其實HTTPS就是安全版本的http協議,

他采用了RSA非對稱加密公私鑰對,使用SSL證書驗證保證了用戶數據在傳輸時的安全行。

下面簡單看一下http和https請求過程的異同

我們按個看下流程

1.客戶端向服務端發送基于https的請求。

2.服務端創建公私鑰對。

3.服務端把共鑰綁定在證書上面返回給客戶端。

4.客戶端驗證證書是否可靠(驗證方式有兩種,分別針對CA機構辦法的證書和自己創建的證書:1.是向頒發證書的CA機構發送請求來驗證。2.是在客戶端保存一個證書副本,來對比兩個證書,同時還會驗證是否被中間人進行了攻擊,驗證方式就是用證書的pubkey去解證書的上密文,如果和證書上的明文一直就可以確定沒有被攻擊)。

5.客戶端生成一個隨機數并用公鑰加密傳遞給服務器。

6.服務器用私鑰解密得到隨機數,根據隨機數產生對稱加密秘鑰并用私鑰對秘鑰進行加密。

7.傳遞對稱秘鑰給客戶端。

8.客戶端用公鑰解密得到對稱加密秘鑰。

以后的通信就會使用對稱加密的秘鑰來進行了,所以https其實也就第一次請求會比較慢,因為要生成通信對稱秘鑰,以后再進行通信就和http不會差很多了。

 

iOS對于HTTPS的支持

在說這點之前,先說說tinypng這個網站的接口。

注冊新用戶后會返回給你一串key,我們要針對這串key做https請求

該站采用的是HTTP Basic Auth認證方式(關于Basic Auth認證方式詳情參看維基百科)。

所以我們做請求的時候就需要使用添加headerfield。

返回的時候會把我們上傳圖片處理后的下載路徑傳回來,比較奇葩的是,路徑并不在響應體而是在響應頭中的Location字段內...(難道圖片就不需要保密了么...)。

下面說說iOS該怎么做,

iOS的NSURLConnection和NSURLsession的API都提供了很方便的API來支持https請求。

我在實際操作的時候使用的是NSURLConnection。

首先創建請求:

 1 NSURL *url = [NSURL URLWithString:REQUEST_URL]; 2  3 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 4  5 NSString *basicAuthUsername = BASIC_AUTH_USERNAME; 6 NSString *basicAuthPassWord = BASIC_AUTH_PASSWORD; 7 NSData *authorizationData = [[NSString stringWithFormat:@"%@:%@",basicAuthUsername,basicAuthPassword] dataUsingEncoding:NSASCIIStringEncoding]; 8 NSString *authorizationStr = [NSString stringWithFormat:@"Basic %@",[authorizationData base64EncodedStringWithOptions:0]]; 9 NSLog(@"%@",authorizationStr);10 [request setHTTPMethod:@"POST"];11 [request addValue:authorizationStr forHTTPHeaderField:@"Authorization"];12 [request addValue:@"*/*" forHTTPHeaderField:@"Accept"];

 

URL在API中提供的有,只是協議我們寫為HTTPS,然后進行Authorization頭字段的拼接,實際上就是Basic base64(用戶名:密碼)。

Accept這里設置為了*/*,其實如果知道服務器返回類型可以直接指定application/json或者text/json之類的就行。

 

下面看看連接:

1 -(BOOL)connection:(NSURLConnection*)connection canAuthenticateAgainstPRotectionSpace:(NSURLProtectionSpace*)protectionSpace2 {3     return[protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];4 }5 6 -(void)connection:(NSURLConnection*)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge*)challenge7 {8     [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];9 }

 

我們需要實現NSURLConnectionDelegate,然后實現上面的兩個方法。

第一個方法是判斷需要響應哪一類的安全問題,

  NSString *NSURLAuthenticationMethodDefault;

  NSString*NSURLAuthenticationMethodHTTPBasic;

  NSString*NSURLAuthenticationMethodHTTPDigest;

  NSString*NSURLAuthenticationMethoDHTMLForm;

  NSString*NSURLAuthenticationMethodNegotiate;

  NSString*NSURLAuthenticationMethodNTLM;

  NSString*NSURLAuthenticationMethodClientCertificate;

  NSString*NSURLAuthenticationMethodServerTrust;

可以響應的安全問題有很多,這里我們只響應HTTPS相關的就行,因此選擇NSURLAuthenticationMethodServerTrust。

第二個方法是處理驗證結果的,這里我這樣寫會直接忽略證書驗證,這里我們可以處理證書的驗證策略邏輯。

我們start connection后就會發現可以成功的調用接口了。

 

關于一些其他細節

寫這個小玩意還是用到了一些沒有接觸過的東西的。

下面總結一下。

1.文件實例類NSFileHandle,這個類可以拿到文件實例,比如我們想去控制文件讀寫細節就需要用到這個類,這里使用是為了保存沒有成功請求的圖片名稱。

2.connection的異步請求做的非常好了,使用多線程請求,具體的請求線程個數由系統來判斷。

3.多線程讀寫文件使用dispatch_barrier_async方法避免資源競爭。

 

不足

1.寫的時候是所有上傳請求全部結束后才開始下載的,這樣效率很低,可以修改為成功上傳后就直接下載不用等待其他的文件上傳,不過這樣多線程處理會稍微麻煩一些。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲最新av在线| 国产一区二区av| 亚洲图中文字幕| 欧美人成在线视频| 黑丝美女久久久| 欧美午夜久久久| 久久久精品视频成人| 在线观看欧美视频| 一本一本久久a久久精品综合小说| 欧美做爰性生交视频| 欧美日韩成人在线观看| 欧美韩国理论所午夜片917电影| 久久精品国产免费观看| 欧美性色19p| 国产网站欧美日韩免费精品在线观看| 九九热精品视频国产| 亚洲一区美女视频在线观看免费| 国产精品视频在线观看| 北条麻妃一区二区在线观看| 91在线无精精品一区二区| 国产国产精品人在线视| 欧美电影在线免费观看网站| 亚洲视频在线免费观看| 日本久久久久亚洲中字幕| 国产精品中文字幕在线| 夜夜躁日日躁狠狠久久88av| 欧美成人免费在线视频| 久久影院模特热| 亚洲第一视频网| 亚洲丁香久久久| 中文字幕在线看视频国产欧美| 亚洲成人精品视频在线观看| 亚洲www永久成人夜色| 亚洲欧美激情另类校园| 久久精品夜夜夜夜夜久久| 日韩黄色高清视频| 久久99久久99精品中文字幕| 九九热最新视频//这里只有精品| 6080yy精品一区二区三区| 欧美xxxx做受欧美| 久久人体大胆视频| 日韩中文在线不卡| 亚洲国内精品视频| 亚洲一级黄色av| 亚洲一区二区在线| 亚洲毛茸茸少妇高潮呻吟| 九九综合九九综合| 亚洲91精品在线观看| 精品日本美女福利在线观看| 欧美大尺度电影在线观看| 日韩av网址在线| 日韩欧美国产免费播放| 欧美乱大交xxxxx另类电影| 久久久久www| 午夜美女久久久久爽久久| 色婷婷综合久久久久中文字幕1| 在线看片第一页欧美| 国产精品久久久久aaaa九色| 久久国产精品久久国产精品| 欧美一级大片在线免费观看| 亚洲在线视频观看| 亚洲电影第1页| 欧美在线一级视频| 日韩经典一区二区三区| 午夜精品久久久久久久久久久久久| 九九久久国产精品| 久久天天躁狠狠躁夜夜av| 国产91精品久久久久| 欧美主播福利视频| 国产精品白丝av嫩草影院| xxx欧美精品| 中文字幕av一区| 国产在线播放不卡| 欧美成人精品不卡视频在线观看| 国产成人综合精品| 夜夜狂射影院欧美极品| 日韩福利伦理影院免费| 在线视频一区二区| 国产精品久久久久久久一区探花| 亚洲欧美综合精品久久成人| 性欧美xxxx视频在线观看| 精品夜色国产国偷在线| 成人观看高清在线观看免费| 亚洲欧洲在线视频| 日韩成人激情视频| 亚洲精品久久久久久久久久久久久| 全球成人中文在线| 日韩极品精品视频免费观看| 国产日韩中文字幕| 国产亚洲激情视频在线| 国产在线观看不卡| 国产欧美va欧美va香蕉在线| 欧美最顶级的aⅴ艳星| 91精品国产免费久久久久久| 在线视频欧美日韩精品| 久久视频这里只有精品| 97在线视频免费播放| 国内精品久久久久影院 日本资源| www.久久撸.com| 久久精品一偷一偷国产| 国产精品香蕉在线观看| 欧美国产日韩二区| 在线视频欧美日韩| 久久噜噜噜精品国产亚洲综合| 久久综合久久八八| 亚洲影院污污.| 最好看的2019年中文视频| 欧美高清在线观看| 色婷婷综合久久久久| 丝袜美腿精品国产二区| 亚洲最新av在线网站| 亚洲欧洲国产一区| 亚洲精品日韩激情在线电影| 精品国产91久久久久久| 日韩精品在线播放| 国产精品视频免费在线| 免费91麻豆精品国产自产在线观看| 日韩av大片在线| 欧美精品免费在线| 青青草国产精品一区二区| 亚洲人成网7777777国产| 国产精品xxx视频| 久久在线免费视频| 国产精品成人品| 日韩一二三在线视频播| 日本精品久久久久影院| 欧美性猛交xxxx黑人| 91av在线精品| 国内精品模特av私拍在线观看| 91美女高潮出水| 亚洲第一精品久久忘忧草社区| 亚洲网站在线播放| 国产精品久久av| 正在播放欧美视频| 欧美日韩国产精品一区| 亚洲国产精品999| 97国产suv精品一区二区62| 国产精品自产拍在线观看中文| 这里精品视频免费| www日韩中文字幕在线看| 国产精品久久久久免费a∨| 欧美一级高清免费| 国产69精品99久久久久久宅男| 欧美性猛交视频| 国产一区二区免费| 日韩资源在线观看| 国产中文字幕日韩| …久久精品99久久香蕉国产| 国产精品夫妻激情| 在线日韩av观看| 92国产精品久久久久首页| 亚洲一区二区三区久久| 欧美日韩一区二区在线播放| 影音先锋日韩有码| 久久久国产成人精品| 亚洲女人被黑人巨大进入| 中文字幕精品一区久久久久| 91影院在线免费观看视频| 精品中文字幕在线观看| 国产精品久久在线观看| 欧美激情亚洲综合一区| 高清日韩电视剧大全免费播放在线观看| 久久躁日日躁aaaaxxxx| 欧美国产日韩一区二区在线观看|