我需要获取一些需要身份验证的数据(http://example.com/profile.php)。 首先,我登录(http://example.com/login.php,复制PHPSESSID,通过发送PHPSESSID获取数据
所以我写了两个axios请求,首先是使用凭证登录页面的POST请求,然后获取PHPSESSID,然后是使用先前的PHPSESSID到/profile.php的GET请求,以获取所需的数据。
所以我写了两个axios请求,首先是使用凭证登录页面的POST请求,然后获取PHPSESSID,然后是使用先前的PHPSESSID到/profile.php的GET请求,以获取所需的数据。
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()
我没有得到预期的数据,并且收到“没有访问此页面的权限”。 然后,我尝试发送保存在我的浏览器中的getData函数(而不是来自getCookie())中的PHPSESSID,并且工作正常!我通过运行代理检查了两个GET请求,它们都是相同的(PHPSESSID除外)。后来我认为服务器不会使用“ axios”作为用户代理对请求进行身份验证,并且像在浏览器中一样更改了我的请求标头,仍然没有什么不同。
为什么来自axios的带有cookie的请求不起作用,但是来自浏览器的请求却起作用?