2017-01-23 304 views
0

我目前正在开发一个Django Web应用程序,该应用程序应该在基于InSales(一种流行的俄语Web平台)的在线商店中添加一些功能。我使用Python的官方InSales库,名为pyinsales,从注册商店获得订单产品等对象。API GET请求返回404

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或密码)。感谢所有试图回答的人。

回答

0

分析github上pyinsales代码,我意识到网址应该myinsales域是一个子域名,因此,如果完整的URL是http://shop.myinsales.ru/则第一个参数在pyinsales应该是。这是一个可惜没有人在模块上指出,在自述中,但这样的事情发生

0

404意味着服务器找不到您请求的内容。

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

所以它不是一个认证问题,好像没有订单在特定端点。

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

你也可以尝试在邮件程序等程序中测试端点,以确保端点在你试图以编程方式点击它们之前是有效的。

+0

那么,这太明显了(我敢打赌大家都知道什么是404)。有趣的是 - 我控制了商店。我确信那里有**物品。当有一个官方模块时,使用'requests'非常不舒服,所以我不想使用它。但是,无论如何感谢 –

+0

你确定端点本身的工作吗?如果您尝试使用curl或类似邮递员的程序击中端点,它是否有效? – jasonleehodges

+0

那么,这是很难检查,因为InSales是一个非常私人和良好的封闭平台。但我确信端点能够正常工作,因为网站本身可以工作,并且可以与许多使用相同API的其他应用程序一起工作 –