Мне нужно получить некоторые данные (http://example.com/profile.php), которые требуют аутентификации.
При первом входе в систему (http://example.com/login.php), скопируйте PHPSESSID, получите данные, отправив PHPSESSID
Итак, я написал два запроса axios: сначала POST-запрос для входа на страницу с учетными данными и получения PHPSESSID, затем GET-запрос к /profile.php с предыдущим PHPSESSID для получения необходимых данных.
Итак, я написал два запроса axios: сначала POST-запрос для входа на страницу с учетными данными и получения PHPSESSID, затем GET-запрос к /profile.php с предыдущим PHPSESSID для получения необходимых данных.
const getCookie = () => {
axios({
method: 'post',
url: 'http:/example.com/index.php',
params: {
uname: config.uname,
upwd: config.upwd
},
withCredentials: true,
}).then(res => {
let cookie = res.headers['set-cookie'][0]
cookie = cookie.match(/PHPSESSID=.{26}/)
getData(cookie[0])
})
}
const getData = (cookie) => {
axios({
method: 'get',
url: 'http:/example.com/profile.php',
headers: {
'Cookie': cookie
},
withCredentials: true,
}).then(response => {
console.log(response.data)
})
}
getCookie()
Я не получил ожидаемые данные и получил «нет разрешения на доступ к этой странице».
Затем я попытался отправить PHPSESSID, который был сохранен в моем браузере, внутри функции getData (вместо этого, полученной из getCookie ()), и все работает отлично! Я проверил оба запроса GET, запустив прокси-сервер, и оба они идентичны (кроме PHPSESSID). Позже я подумал, что сервер не аутентифицирует запросы с помощью 'axios' в качестве пользовательского агента, и изменил заголовки моих запросов, как в браузере, и все равно ничего не изменилось.
Почему запросы с cookie от axios не работают, а из браузера работают?