这个Javascript请求和Python请求之间的区别是什么?

时间:2018-02-15 04:15:53

标签: javascript python

我在Python中写了一些内容,并试图弄清楚为什么JS中看似等效的代码到底是不是有效。

使用Python -

使用的标题:

    self.session = requests.Session()
    #Set headers
    self.headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Connection': 'keep-alive',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'en-US,en;q=0.8',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
}   

代码:

link = 'https://www.kith.com/cart'
        data = [
    ('updates'+'['+'888074764295'+']', '1'),
    ('updates'+'['+'888463982599'+']', '0'),
        ]
        click = self.session.post(link, headers= self.headers, data=data, verify = False)

不工作JS -

      const secondaryVar = `updates[888463982599]`;
      const desiredVariant = `updates[888074764295]`;

      const checkoutForm = {};

      checkoutForm[desiredVariant] = '1';
      checkoutForm[secondaryVar] = '0';

      //Post request to cart to update it with desired product
      request({
              url: 'https://www.kith.com/cart',
              followAllRedirects: true,
              method: 'post',
              formData: checkoutForm,                  
          headers : {
                'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
                'Accept-Encoding':'gzip, deflate, br',
                'Accept-Language':'en-US,en;q=0.9',
                'Cache-Control':'max-age=0',
                'Connection':'keep-alive',
                'Upgrade-Insecure-Requests':'1',
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
            },


          },

          function(err, res, body) {

我已将其缩小到这段代码,但据我所知,Python和JS代码之间的代码没有显着差异。我的猜测是它与会话或标题有关......但我又不知道。

感谢您的回复

1 个答案:

答案 0 :(得分:2)

我认为Python可能不尊重cors,这可以解释差异。我不知道你正在使用什么JavaScript框架,但是使用jQuery,以下工作在从kith.com网站执行此代码时起作用。

为避免CORS出现任何问题,我删除了浏览器自动设置的标头,并将网址从www.kith.com更改为kith.com

jQuery.ajax("https://kith.com/cart", settings={method:"post", headers : {
                'Accept':'application/json',
                'Accept-Language':'en-US,en;q=0.9',
                'Cache-Control':'max-age=0',
                'Upgrade-Insecure-Requests':'1',
            }, data:{"desiredVariant":1,"secondaryVar":0}}).error(function(err){console.log("error"+ err)}).success(function(res){console.log(res)})