javascript - 模拟天猫ajax请求抓取商品价格,无法获取响应数据?
在浏览器中根据头信息模拟ajax请求抓取淘宝商品价格,无法获取response信息。
**在浏览器中输入headers 中的request url,显示的是页面无法访问。
想知道下淘宝试用了什么技术屏蔽了,以及怎么解决这个问题,按道理说展现在客户端的数据都能获取的到的,谢谢?**
测试商品地址:https://detail.tmall.com/item.htm?id=41809359032&skuId=3145753887167
ajax地址:https://mdskip.taobao.com/core/initItemDetail.htm?sellerPreview=false&tmallBuySupport=true&service3C=false&isAreaSell=false&isApparel=false&cartEnable=true&isSecKill=false&queryMemberRight=true&itemId=41809359032&isRegionLevel=false&showShopProm=false&household=false&tryBeforeBuy=false&isUseInventoryCenter=false&cachedTimestamp=1461004599117&isForbidBuyItem=false&offlineShop=false&addressLevel=2&callback=setMdskip×tamp=1461017878859&isg=AmVlWlJ2uZ-EwfyJzSxGWUY49Suf-Rk0
回复内容:
在浏览器中根据头信息模拟ajax请求抓取淘宝商品价格,无法获取response信息。
**在浏览器中输入headers 中的request url,显示的是页面无法访问。
想知道下淘宝试用了什么技术屏蔽了,以及怎么解决这个问题,按道理说展现在客户端的数据都能获取的到的,谢谢?**
测试商品地址:https://detail.tmall.com/item.htm?id=41809359032&skuId=3145753887167
ajax地址:https://mdskip.taobao.com/core/initItemDetail.htm?sellerPreview=false&tmallBuySupport=true&service3C=false&isAreaSell=false&isApparel=false&cartEnable=true&isSecKill=false&queryMemberRight=true&itemId=41809359032&isRegionLevel=false&showShopProm=false&household=false&tryBeforeBuy=false&isUseInventoryCenter=false&cachedTimestamp=1461004599117&isForbidBuyItem=false&offlineShop=false&addressLevel=2&callback=setMdskip×tamp=1461017878859&isg=AmVlWlJ2uZ-EwfyJzSxGWUY49Suf-Rk0
应该是设置了请求头的,看了下请求头,的确添加了很多信息,比如:
<code>:host:mdskip.taobao.com :method:GET :path:/core/initItemDetail.htm?cachedTimestamp=1461009311258&cartEnable=true&showShopProm=false&isRegionLevel=false&isApparel=false&isSecKill=false&household=false&tryBeforeBuy=false&tmallBuySupport=true&isAreaSell=false&addressLevel=2&isUseInventoryCenter=false&itemId=41809359032&service3C=false&isForbidBuyItem=false&queryMemberRight=true&sellerPreview=false&offlineShop=false&callback=setMdskip×tamp=1461033279024&isg=AtzcYW2gFJ356UEz3F1PosPPLPGOSIB9 :scheme:https :version:HTTP/1.1 </code>
这些:开头的。
尝试了下,仅仅使用这些:开头的,还是获取不到数据,所以,直接使用了完整的请求头,是可以获取到数据的。
个人觉得,除了:开头的请求头之外,下面这两信息也很重要:
<code>cookie:thw=cn; _tb_token_=gZXg9WRSTLiB; t=d11a113cccfbf234424ce707c955b9dd; cookie2=d6cd51e3c36d47dac9fabd9d79a11cd9; v=0; cna=H6pvD4R7/TgCAbaX1qJODtvU; _m_h5_tk=7660b8def380dbda6d85d45bc16b5726_1460713055364; _m_h5_tk_enc=23dd2b0a97166d8978bc9ecee14d6512; l=AqCgGx9hG8f3aY1ncDHLO1GX8KVyq4Rz referer:https://detail.tmall.com/item.htm?id=41809359032&skuId=3145753887167 </code>
尤其是cookie,从他代码中看到设置了referer的,没有测试是否可以去掉该设置,你可以自己设置。
所以,天猫这个限制,应该是请求头+cookie+(或者还有其他)的方式来处理的,你只需要模拟类似的请求,添加这些请求信息即可。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。

在PHP8 中,match表达式是一种新的控制结构,用于根据表达式的值返回不同的结果。1)它类似于switch语句,但返回值而非执行语句块。2)match表达式使用严格比较(===),提升了安全性。3)它避免了switch语句中可能的break遗漏问题,增强了代码的简洁性和可读性。

胶囊是一种三维几何图形,由一个圆柱体和两端各一个半球体组成。胶囊的体积可以通过将圆柱体的体积和两端半球体的体积相加来计算。本教程将讨论如何使用不同的方法在Java中计算给定胶囊的体积。 胶囊体积公式 胶囊体积的公式如下: 胶囊体积 = 圆柱体体积 两个半球体体积 其中, r: 半球体的半径。 h: 圆柱体的高度(不包括半球体)。 例子 1 输入 半径 = 5 单位 高度 = 10 单位 输出 体积 = 1570.8 立方单位 解释 使用公式计算体积: 体积 = π × r2 × h (4
