模拟淘宝提交订单可行性分析

       在已经获取了登录淘宝成功Cookie的前提下,是否能实现模拟淘宝提交订单的功能呢?近期用HttpWatch搜集了一些商品的购买数据,这里我尝试根据这些数据从理论上来分析模拟淘宝提交订单实现的原理并尝试用C#来实现,虽然成功实现了提取提交订单的数据但最终并成功提交订单,在此抛砖引玉,还请各位有共同爱好的同学多多探讨。

       以从商品页面的立刻购买提交订单为例,我们购买商品的流程为:立刻购买–>提交订单–>付款。在整个购买过程中,会出现两次方式为POST的请求,第一次POST请求链接为:https://buy.taobao.com/auction/buy_now.jhtml?spm=2013.1.20140002.d1.nlx60c,对应到浏览器的动作为点击浏览器页面的”立刻购买”;第二次POST请求连接为“https://buy.taobao.com/auction/confirm_order.htm?x-itemid=522915048017&x-uid=599283473&spm=a210c.1.1.1.MEeeFR”,对应到浏览器的动作为点击浏览器页面的“提交订单”。那么这两次POST请求需要向服务器发送哪些数据?这些数据又从何而来呢?

       1.“立刻购买”抓包数据分析及C#实现数据提取

       该请求的POST数据列表如下所示:


      这些数据该从哪里获取呢?我们回溯至以GET方式请求商品链接的回复内容,会发现我们想要的都在这里。


      “立刻购买”所需要的POST这些信息可以用如下代码来获取。


      关于POST数据中的skuid,应该是遵循如下规则:如果商品链接中有属性,例如尺码,颜色等等,就会有skuid的相应信息,若此类商品未写入skuid属性值,那么服务器回复的内容中会包含类似“此商品需要写入skuid信息”。例如请求此类商品链接时,我们得到回复内容中就会包含如下信息:

      如果商品链接中不需要选择任何属性,那么此商品的“立刻购买”的POST数据中skuid直接为空即可。因为我抓取的数据样本还不够多,上述内容是我的推测。

       2.“提交订单”抓包数据分析及C#实现数据提取

    “提交订单”需要POST数据包含如下内容。

data of submit

       我搜寻这些内容的第一目标自然是上一次POST请求时服务器回复的内容。请看,“提交订单”POST时需要的内容就在请求“立刻购买”时服务器回复的内容里。

order data
       我用如下代码来提取我们需要的内容。

       提取时需要注意,并非每一个input控件都有值,部分内容需要到orderdata中去提取,目前貌似不同商品需要从data中提取出的数据不完全一样,但linkage和hierarchy基本一致。
        另外需要特别注意的是data数据中submitOrder_1一项包含ua数据,“立刻购买”回复内容中并不包含此项,目前我暂且认为该UA为登录时的用的UA。

       3.用C#实现的结果及其原因分析

      理论上而言,拥有登录时的cookie与提交订单时完整的数据包,我们应该可以用C#来成功模拟淘宝的购买动作,但实际上,我按照上述思路提交数据后,得到的服务器的回复是“对不起,无法购买”。从抓包数据粗略来看,目前C#模拟的动作与浏览器不一致的点有:

      3.1 浏览器实现购买时,商品链接,立刻购买,提交订单三个动作的SPM参数均不一致。但我目前暂不知后续两个动作的spm参数该如何获取,貌似与https://g.alicdn.com/alilog/mlog/??spm.js,spmact.js?v=141204该js文档相关。目前我尝试后两个动作使用的SPM参数与第一个参数一致,或者后两个动作不带spm参数,最终请求的结果均一致。

      3.2 浏览器购买时,立刻购买动作提交的数据中包含”sourcetime”这一项,这个应该是服务器的时间,但我偷懒了一下,在模拟淘宝“立刻购买”时并未带上该参数。实验验证,不带该参数,也可以得到貌似完整的“提交订单”的页面。不过又可能该页面中有一些细节数据是有差异的,只是我没有注意到。

      3.3 我并没有去核对浏览器提交订单时的数据与模拟提交订单的数据,不能确保数据完全一致。

      我自己认为最大的可能性应该是第1点,各位觉得呢?后续会继续尝试,还请各路同学多多指点。

Comments

  1. By 文奇

    回复

  2. By 文奇

    回复

  3. 回复

  4. By 风雨

    回复

    • By livezingy

      回复

  5. By live

    回复

  6. By beijixingtu

    回复

  7. By livezingy

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Fork me on GitHub