IOS React Native fetch()POST:网络请求失败

时间:2017-10-03 13:31:49

标签: react-native fetch

1)以下代码在IOS上给出了一个错误,但在Android上工作。

2)在IOS上我可以使用" get"但"发布"

所以这不适用于ios:

    var data = new FormData();
    data.append("fileUpload", { uri: imageUri, name: filename, type: "image/jpeg" });
    data.append("filename", filename);
    data.append("name", "uploadedFile");
    const config = {
        method: "POST",
        headers: {
            Accept: "application/json",
            "Content-Type": "multipart/form-data;"
        },
        body: data
    };

    return fetch(url, config).then((response) => response.json())
        .then(res => { return res ;})
        .catch(error => {
            console.error(error);
            return { name: "network error", description: "" };
        });

我尝试根据其他帖子(如React Native fetch() Network Request Failed)修复IOS上的info.plist,但错误仍然存​​在

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>CFBundleDevelopmentRegion</key>
        <string>en</string>
        <key>CFBundleDisplayName</key>
        <string>myapp</string>
        <key>CFBundleExecutable</key>
        <string>$(EXECUTABLE_NAME)</string>
        <key>CFBundleIdentifier</key>
        <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>CFBundleName</key>
        <string>$(PRODUCT_NAME)</string>
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
        <string>1.0</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
        <string>1</string>
        <key>LSRequiresIPhoneOS</key>
        <true/> 
        <key>NSAppTransportSecurity</key>                   // i add this
        <dict>                                              // i add this
            <key>NSAllowsArbitraryLoads</key>               // i add this
            <true/>                                         // i add this
            <key>NSAllowsArbitraryLoadsInWebContent</key>   // i add this  
            <true/>                                         // i add this
        </dict>                                             // i add this 
        <key>NSCameraUsageDescription</key>
        <string>Your message to user when the camera is accessed for the first time</string>
        <key>NSLocationWhenInUseUsageDescription</key>
        <string></string>
        <key>NSMicrophoneUsageDescription</key>
        <string>Your message to user when the microsphone is accessed for the first time</string>
        <key>NSPhotoLibraryUsageDescription</key>
        <string>Your message to user when the photo library is accessed for the first time</string>
        <key>UIAppFonts</key>
        <array>
            <string>Zocial.ttf</string>
            <string>Feather.ttf</string>
        </array>
        <key>UILaunchStoryboardName</key>
        <string>LaunchScreen</string>
        <key>UIRequiredDeviceCapabilities</key>
        <array>
            <string>armv7</string>
        </array>
        <key>UISupportedInterfaceOrientations</key>
        <array/>
        <key>UIViewControllerBasedStatusBarAppearance</key>
        <false/>
        <key>LSApplicationCategoryType</key>
        <string></string>
    </dict>
    </plist>

我尝试重启xcode,清理项目并构建所有。

任何建议?感谢

1 个答案:

答案 0 :(得分:1)

iOS不允许不安全的HTTP请求。为此,您必须在info.plist内添加域名作为例外。

添加以下内容:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>