Мне нужно получить данные (код html-страницы) после перенаправления.
То есть отправка данных на определенный URL-адрес через Post, затем, если данные верны, страница перенаправляется, когда перенаправлениеЗакончено, я должен восстановить исходный код страницы и распечатать его.
Но разве я не преуспел, где я не прав?
Код:
import * as React from 'react';
import { Text, View, StyleSheet, Button } from 'react-native';
import { Constants } from 'expo';
import { TextInput } from 'react-native-paper';
import Base64 from './Base64';
import cio from 'cheerio-without-node-native';
export default class App extends React.Component {
constructor() {
super();
this.state = {
ident: '',
pwd: '',
};
}
login() {
let { ident, pwd } = this.state;
const data = {
iliad: {},
};
let details = {
'login-ident': ident,
'login-pwd': pwd,
};
let formBody = [];
for (let property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + '=' + encodedValue);
}
formBody = formBody.join('&');
fetch('https://www.iliad.it/account/', {
method: 'POST',
redirect: 'manual',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: formBody,
})
.then(response => response.text())
.then(body => {
const $ = cio.load(body);
const results = body;
console.log(results);
})
.catch(error => {
console.error(error);
});
}
render() {
return (
<View style={styles.container}>
<Text style={styles.title}>Iliad</Text>
<View
style={{
backgroundColor: '#13a8f4',
borderRadius: 5,
padding: 5,
marginBottom: 5,
}}>
<TextInput
style={styles.textinput}
onChangeText={ident => this.setState({ ident })}
value={this.state.ident}
label="IdUser"
keyboardType="numeric"
theme={{ colors: { primary: '#03a9f4' } }}
/>
<TextInput
style={styles.textinput}
onChangeText={pwd => this.setState({ pwd })}
value={this.state.pwd}
label="Pwd"
theme={{ colors: { primary: '#03a9f4' } }}
/>
</View>
<Button onPress={() => this.login()} title="Login" color="#03a9f4" />
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
paddingTop: Constants.statusBarHeight,
backgroundColor: '#fff',
padding: 8,
},
title: {
margin: 24,
fontSize: 48,
fontWeight: 'bold',
textAlign: 'center',
color: '#c00',
},
textinput: {
/*height: 40,
borderColor: '#000',
borderWidth: 1,
padding: 5,
borderRadius: 5,
marginBottom: 5,*/
selectionColor: '#000',
//marginBottom: 50,
backgroundColor: '#fff',
},
});