虽然现在自己写后端都是用application/json作为数据传输的方式,但是,在别人的站点上爬数据时难免碰到依然使用x-www-form-urlencoded的同胞。
今天就在拿数据的时候掉坑了。查看网络请求,用的是x-www-form-urlencoded,然后就尝试着用postman发请求,很顺利地取到了数据,接着就去写爬虫了。写完跑不过,服务器那边一直返回500,拿不到数据,查了一些资料后发现原来是用的编码方式的问题。下面就来具体讲一下。
x-www-form-urlencoded字符编码的POST请求参数会被解析成文本
key1=value1&key2=value2&key3=value3
当遇到array时,会编码成
key1=value1&key1=value2
然后这里就会有一个问题了,当数组中只有一个元素的时候编码成
key1=value1
然而因为本身键值对就会被编码成这个样子,所以在服务端拿到数据解码的时候,它默认会解码成键值对,而不是单一元素数组。这就个数据的传递带来了麻烦。
下面来谈一下解决办法,我不知道为什么就去用json.dumps()去转那个数组然后放dist里面去试,然后就莫名其妙地拿到了数据......可能在解码的时候他会去处理一下json的数据吧。
嗯,然后想了一下,这也不失为一种良好的防爬的方法。把关键数据放在数组里边,用x-www-form-urlencoded来传,可能会让写爬虫的人难受一会会,哈哈哈~