当前位置: 首页 > 知识库问答 >
问题:

403禁止请求。通过Python发布,尽管google chrome收到响应

班高明
2023-03-14

我是一个新手。我试图通过反向工程请求和刮取数据来获取flipkart卖家的产品数据。我尝试的URL是:https://www.flipkart.com/sellers?pid=hsaffjwt2wuyhhhx,其中包含特定产品的销售商列表。

当我在Google chrome中打开network选项卡时,我可以看到它向https://www.flipkart.com/api/3/page/dynamic/product-Sellers发出了一个POST请求,请求负载为:{“RequestContext”:{“ProductID”:“HSAFFJWT2WUYHHX”},“LocationContext”:{“PinCode”:“110092”}}

我在代码中复制请求头和浏览器发送的有效负载,但我得到的是403禁止消息,而不是有效的JSON数据。

另外,我也成功地使用Selenium打开了这个页面(https://www.flipkart.com/sellers?pid=hsaffjwt2wuyhhhx),然后使用Beautiful Soup解析卖家的数据。但是,硒是非常非常慢的。这就是为什么我试图直接获取json,它在这个页面上动态填充sellers数据。我试过从我的代码和邮递员发出一个post请求,但没有成功。

import requests
import json
headers = {
            'Accept': '*/*',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'en-US,en;q=0.9',
            'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
            'Connection': 'keep-alive',
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
            'Referer' :   'https://www.flipkart.com/sellers?pid=HSAFFJWT2WUYHHHX',
            'Content-Type': 'application/json',
            'Origin': 'https://www.flipkart.com',
            'Host': 'www.flipkart.com',
            'Pragma': 'no-cache'
            }

url = "https://www.flipkart.com/api/3/page/dynamic/product-sellers"
payLoad = {"requestContext":{"productId":"HSAFFJWT2WUYHHHX"},"locationContext":{"pincode":"001195"}}
response = requests.post(url,headers = headers,data = json.dumps(payLoad))
print(response.status_code,response.reason)
print(response.text)
print(response.request.headers)

但我要禁止403。即使该页面不需要用户登录。

也许有一些安全令牌是api期望的,但我没有给出,这就是为什么它的抛出403被禁止的原因。

共有1个答案

白阳煦
2023-03-14

添加到X-User-Agent中。试试看:

import requests
import json
headers = {
            'Accept': '*/*',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'en-US,en;q=0.9',
            'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
            'Connection': 'keep-alive',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
            'X-user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36 FKUA/website/41/website/Desktop',
            'Referer' :   'https://www.flipkart.com/sellers?pid=HSAFFJWT2WUYHHHX',
            'Content-Type': 'application/json',
            'Origin': 'https://www.flipkart.com',
            'Host': 'www.flipkart.com',
            'Pragma': 'no-cache'
            }

url = "https://www.flipkart.com/api/3/page/dynamic/product-sellers"
payLoad = {"requestContext":{"productId":"HSAFFJWT2WUYHHHX"},"locationContext":{"pincode":"001195"}}
response = requests.post(url,headers = headers,data = json.dumps(payLoad))
print(response.status_code,response.reason)
print(response.text)
print(response.request.headers)

输出:

print(response.status_code,response.reason)
200 OK
 类似资料:
  • 问题内容: 返回403。我可以使用firefox / chrome浏览网站,因此似乎是编码错误。 我不知道自己在犯什么错误。 谢谢。 问题答案: 如果通过对象发出请求,则此方法有效。 输出:

  • 第一次投递到stackoverflow。 我只是试图使用jQuery从json url获取数据。第一个问题是跨源请求块,即使库应该停止这个问题,像ajax跨源js(抱歉不提供这个链接,我太新了,在这里有超过2个链接),我仍然没有运气,一样交叉原点错误。 所以我搬到了JSONP。 (我也尝试过JSONP请求的AJAX语法) 现在我可以在网络选项卡中看到数据正在返回,但状态是403禁止。chrome网

  • 我在一个网站上工作,跟踪待办事项列表,并从服务器上提取它。下面有两个示例ajax调用。任务GET调用工作正常,但添加POST不工作。出于某种原因,它给我一个403禁止的错误,结果,不执行代码。 在Django框架中发出ajax Post请求时,我看到了403禁止的错误,我阅读了@yohn发布的链接,但我不理解如何实现这个解决方案。

  • 我正在尝试使用jQuery创建一个更新字符串数组的POST。服务器是一个引导Spring MVC服务器。当我执行POST时,服务器的响应是。 Spring控制器 2014-11-20 18:44:53.427信息6724---[main]o.s.w.s.handler.SimpleURLHandlerMapping:将URL路径[/]映射到类型为[class org.springframework

  • 我收到了明显臭名昭著的apache 2禁止错误#403,我尝试遵循有关该主题的指南,但似乎都不起作用。我使用的是Ubuntu Server和Apache 2.4.41 我的网站结构类似于/var/www/html/index.html 我的apache2.conf[/etc/apache2/apache2.conf]: 我的vhosts.conf[/etc/apache2/站点可用/000-def

  • 问题内容: 我试图通过从slide_images文件夹中获取所有图像名称并将其附加到来动态地动态显示滑块图像。 问题答案: 最后,我通过使用json解决了这个问题。 首先,我创建getimages.php文件并读取该文件中的目录,并获取所有图像名称并将该名称存储在数组中。 getimages.php 从要动态加载图像的页面调用getimages.php。 index.php 这对我来说是完美的。