2015-05-26 20 views
8

我有一个使用Vagrant构建的本地虚拟机。我能够卷曲并直接从浏览器访问URL。出于某种原因,当我使用fetch API在我的react-native应用中进行相同的调用时,它会一直给我提供Network request failed错误。无法使用react-native进行API调用

下面是代码片段:

fetchData() { 

    this.setState({ isLoading: true }); 

    var baseURL = 'https://192.168.33.33/api/session'; 

    console.log('URL: >>> ' + baseURL); 

    fetch(baseURL) 
    .then((response) => response.json()) 
    .then((responseData) => { 
    console.log(responseData); 
    }) 
    .catch(error => { 
    console.log(error); 
    }) 
    .done(); 
} 

baseURL日志有返回正确的URL和错误看起来像这样:

URL: >>> http://192.168.33.33/api/session 
TypeError: Network request failed {stack: (...), message: "Network request failed"} 
    message: "Network request failed" 
    stack: (...) 
    get stack: function() { [native code] } 
    set stack: function() { [native code] } 
    __proto__: Error 

我想这可能已经是一个问题由于我的虚拟机无法通过我的应用以某种方式访问​​,所以我继续前进并将其部署到真正的服务器,并且仍然给出了相同的错误。

任何想法?

+0

'https:// 192.168.33.33/api/session'可能需要获取请求中的某种标头? – lyjackal

+0

@lyjackal我不这么认为,所有的代码确实是这样的:http://d.pr/n/18BiU/3kXPWHcD –

+0

如果使用XMLHttpRequest对象,而不是获取,你得到同样的错误? CORS安装是否正确? – user2943490

回答

4

发现问题并解决它。

该问题是由于没有自行创建的CA而在API服务器中拥有自签名证书所致。

我可以尝试创建自己的CA,然后创建一个证书,但我继续,并得到了真正便宜的SSL证书。这解决了这个问题。

-1

我想你可能会面临的same origin policy约束。

有变通办法的many方式。

+0

感谢您的回答!不幸的是,情况并非如此。 –

+1

这不适用于反应原生应用程序。 – Clintm

+0

同源产品策略仅适用于浏览器! – Germinate