我试着用下面的语法来使用fetch:
fetch("https://user:password@url", { ... }).then((response) => { ... }).done();
相同的url在CURL中有效,但在React Native中返回401。有什么想法吗?谢谢,保罗
dohp0rv51#
我发现这种格式https://user:password@url在CURL和节点中工作得很好,但在fetch中就不行了。我必须使用base-64 npm模块并通过一个Headers对象。
https://user:password@url
base-64
// https://www.npmjs.com/package/base-64 const base64 = require('base-64'); ... var headers = new Headers(); headers.append("Authorization", "Basic " + base64.encode("user:password")); fetch("https://url", { headers: headers }) .then((response) => { ... }) .done(); `
deikduxw2#
您可以使用btoa()而不是使用base_64模块。btoa()是Window上的函数。
btoa()
base_64
Window
w6lpcovy3#
获取React Native移动的应用程序的授权请求,我花了更多时间在fetch中搜索这些行
var base64 = require("base-64"); // install it before use from npm i base-64 const uname = "some username goes here"; const pword = "some password goes here"; const getMovies = async () => { try { const response = await fetch( "API URL goes here", { headers: { Authorization: "Basic " + base64.encode(uname + ":" + pword), }, } ); data = await response.json(); setData(data); console.log(data); // console.log(data.name); return data; } catch (error) { console.error(error); } finally { setLoading(false); } }; useEffect(() => { getMovies(); }, []); // other code // inside return <FlatList keyExtractor={(item) => item.id} data={data} renderItem={({ item }) => ( <View style={styles.text_container}> <Text>{item.name}</Text> <Text>{item.images[0].name}</Text> <Text>{item.images[0].src}</Text> </View> )} />
xfb7svmp4#
在React Native中没有其他导入:
const Buffer = require("buffer").Buffer; const credential = "Basic " + Buffer.from(email + ":" + password).toString("base64"); fetch(url, { headers: { Authorization: credential, } })
4条答案
按热度按时间dohp0rv51#
我发现这种格式
https://user:password@url
在CURL和节点中工作得很好,但在fetch中就不行了。我必须使用
base-64
npm模块并通过一个Headers对象。deikduxw2#
您可以使用
btoa()
而不是使用base_64
模块。btoa()
是Window
上的函数。w6lpcovy3#
获取React Native移动的应用程序的授权请求,我花了更多时间在fetch中搜索这些行
xfb7svmp4#
在React Native中没有其他导入: