【问题标题】:API GET request returns 404API GET 请求返回 404
【发布时间】:2017-01-23 17:27:22
【问题描述】:

我目前正在开发一个 Django 网络应用程序,它应该为基于 InSales(一个流行的俄罗斯网络平台)的在线商店添加一些功能。我使用名为 pyinsales 的 Python 官方 InSales 库从注册商店获取 ordersproducts 等对象。

InSales API 基于带有 XML 的 REST 请求。我使用下面的代码在 Django shell 中获取有关订单的信息:

from install.models import Shop
from insales import InSalesApi
shop = Shop.objects.get(shop_url='shop-url.myinsales.ru')
api = InSalesApi(shop.shop_url, 'trackpost', shop.password)
orders = api.get_orders()

这里shop.shop_url 是商店网址(“哦,真的吗?”),trackpost 是我的应用程序的名称,shop.password 是连接所需的密码。密码由 MD5 生成(这是 InSales 规则)。在这里我得到一个错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python3.5/site-packages/insales/api.py", line 32, in get_orders
    return self._get('/admin/orders.xml', {'per_page': per_page, 'page': page}) or []
  File "/usr/local/lib/python3.5/site-packages/insales/api.py", line 291, in _get
    return self._req('get', endpoint, qargs)
  File "/usr/local/lib/python3.5/site-packages/insales/api.py", line 307, in _req
    response = getattr(self.connection, method)(*args, **kwargs)
  File "/usr/local/lib/python3.5/site-packages/insales/connection.py", line 85, in get
    return self.request('GET', path, qargs=qargs)
  File "/usr/local/lib/python3.5/site-packages/insales/connection.py", line 70, in request
    (method, path, resp.status, body), resp.status)
insales.connection.ApiError: GET request to /admin/orders.xml?page=1&per_page=25 returned: 404
b'<?xml version="1.0" encoding="UTF-8"?>\n<errors>\n  <error></error>\n</errors>\n'

我已经检查了所有的错误。正确生成密码(根据官方文档),商店 URL 正确,并且正确使用了 lib 中的所有方法。 InSales 技术支持没有响应,所以现在我不知道发生了什么。

我不想让你调试这个问题,但我想知道什么会导致 404 错误(除了明显的事情,比如不正确的 URL 或密码)。感谢所有试图回答的人。

【问题讨论】:

    标签: python django rest get


    【解决方案1】:

    404 表示服务器找不到您请求的内容。

    https://en.wikipedia.org/wiki/HTTP_404

    所以这不是身份验证问题,似乎该特定端点没有订单。

    您是否尝试过使用python“requests”包而不是使用“pyinsales”模块直接从端点请求数据?这样您就可以自定义自己的标题等。

    您也可以尝试在 postman 等程序中测试端点,以确保端点有效,然后再尝试以编程方式访问它们。

    【讨论】:

    • 嗯,这太明显了(我敢打赌每个人都知道什么是 404)。有趣的是——我可以控制这家商店。我确信那里有 are 对象。有官方模块的时候用requests还是挺不舒服的,所以不想用了。不过还是谢谢
    • 您是否确保端点本身可以​​正常工作?如果您尝试使用 curl 或 postman 之类的程序访问端点,它会起作用吗?
    • 嗯,这很难检查,因为 InSales 是一个非常私密且非常...封闭的平台。但我确信端点可以正常工作,因为该站点本身可以​​正常工作,并且它可以与许多使用相同 API 的其他应用程序一起工作
    【解决方案2】:

    分析github上的pyinsales代码,发现url应该是myinsales域上的子域名,所以如果完整的url是http:// shop.myinsales.ru/ 那么 pyinsales 中的第一个参数应该是 shop。很遗憾没有人在自述文件中指出该模块的工作,但是会发生这样的事情

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      相关资源
      最近更新 更多