500(内部服务器错误)将节点请求转换为获取请求

时间:2018-08-10 08:45:25

标签: javascript node.js react-native request fetch

嗨,我正在使用react native,我在带有请求js的节点中有一个请求。我不想再在服务器上发出请求。我想在前端做。我决定使用提取。 但是当我在前端执行相同的请求时,我收到内部服务器错误500 我只想要从响应中获得的Cookie。

这适用于节点:

var request = require('request');


var dataString2 = 'lmaction=doLogin&username=XXX&password=XXX';

var options2 = {
    url: 'https://onlineservice.klarmobil.de/login',
    method: 'POST',
    headers:{
    'Host': 'onlineservice.klarmobil.de',
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'de,en-US;q=0.7,en;q=0.3',
    'Referer': 'https://www.klarmobil.de/',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1',
    'Cookie': '_gali=kundenlogin'
},,
    body: dataString2
};

function callback2(error, response, body) {
    const cookie= response.headers['set-cookie'][0].split(";")[0] 
}

request(options2, callback2);

这是我在本机中的代码:

fetch('https://onlineservice.klarmobil.de/login', {
    method: 'POST', // or 'PUT'
    body: 'lmaction=doLogin&username=xxx&password=xxx'
    headers:{
        'Host': 'onlineservice.klarmobil.de',
        'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'de,en-US;q=0.7,en;q=0.3',
        'Referer': 'https://www.klarmobil.de/',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Connection': 'keep-alive',
        'Upgrade-Insecure-Requests': '1',
        'Cookie': '_gali=kundenlogin'
    }
  })
  .catch(error => console.log('Error:', error))
  .then((res)=>{
    console.log(res)
    const cookie= response.headers['set-cookie'][0].split(";")[0] 
    console.log(cookie)
  })

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

如果我使用Chromes本机fetch执行此操作,则它不包含Cookie标头(如Jaromanda X猜测的那样)。

此外,您似乎无法覆盖Referer(可能还有其他受保护的标头),因为它与当前站点一起发送(“ https://stackoverflow.com/”)。如果我发送“ klarmobil”引荐来源网址以外的任何内容,这似乎是问题的原因:

curl -i "https://onlineservice.klarmobil.de/login" -H "Origin: https://stackoverflow.com" -H "Accept-Encoding: r" -H "Accept-Language: de,en-US;q=0.7,en;q=0.3" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36" -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" -H "Referer: https://www.klarmobil.de/" -H "Connection: keep-alive" -H "DNT: 1" --data "lmaction=doLogin^&username=xxx^&password=xxx"
-> 200

curl -i "https://onlineservice.klarmobil.de/login" -H "Origin: https://stackoverflow.com" -H "Accept-Encoding: r" -H "Accept-Language: de,en-US;q=0.7,en;q=0.3" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36" -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" -H "Referer: https://stackoverflow.com/" -H "Connection: keep-alive" -H "DNT: 1" --data "lmaction=doLogin^&username=xxx^&password=xxx"
-> 500

此外,我认为以编程方式登录外国网站上的“伪造”请求并提取此类cookie既不道德,也不是一个好主意。由于他们没有为此提供API,因此可能不希望这样做。他们还可以随时更改其登录系统,并且您的程序会中断。