[英]React Native XMLHttpRequest request fails if ssl (https) certificate is not valid
當我正在使用無效證書的https服務器執行XMLHttpRequest時,React Native會拋出異常“操作無法完成。(NSURLErrorDomain error -1202。)”
是否可以禁用對React Native XMLHttpRequest的ssl警告/檢查?
免責聲明:此解決方案應該是臨時的並記錄在案,以便它不會停留在軟件的生產階段,這僅用於開發。
對於iOS,您只需打開您的xcodeproject(在RN中的iOS文件夾中),打開后,轉到RCTNetwork.xcodeproj,在該項目中,導航到RCTHTTPRequestHandler.m
在該文件中,您將看到如下所示的行:
#pragma mark - NSURLSession delegate
在該行之后,添加此功能
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
{
completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
}
瞧,您現在可以在沒有有效證書的情況下對API進行不安全的調用。
這應該足夠了,但是如果你仍然遇到問題,你可能需要轉到項目的info.plist,左鍵單擊它並選擇打開為...源代碼。
最后加入
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
所以你的文件看起來像這樣
...
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
</dict>
</plist>
對於真正的生產就緒解決方案, https://stackoverflow.com/a/36368360/5943130該解決方案更好
這是因為iOS 9中的新App Transport Security(ATS)功能(以及8.4)。 ATS已經到位,請確保您的應用符合安全連接的最佳做法。 如果您遇到此錯誤,則意味着您沒有使用安全連接,而您應該對此做些什么。
但是,您可以通過編輯應用程序的Info.plist文件來覆蓋默認行為。
您可以設置許多不同的標志,它們都在Apple官方技術說明中描述。
最簡單的修改可以讓你一起關閉ATS,如下所示:
Open as > Source Code
<dict>
標記下 如果你計划發布你的應用程序,你真的真的不應該留在這里。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
據我所知,你不能在web XHR中做到這一點,所以React Native不會暴露它。 我已經檢查了源代碼,似乎證實了這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.