2017-01-23 5 views
0

Ich entwickle gerade eine Django Webanwendung, die einigen Online-Shops einige Funktionen hinzufügen soll, die auf InSales (einer populären russischen Webplattform) basieren. Ich benutze die offizielle InSales-Lib für Python namens pyinsales, um Objekte wie Bestellungen und Produkte von registrierten Geschäften zu bekommen.API GET Anfrage zurück 404

Die InSales-API basiert auf REST-Anforderungen mit XML. Ich verwende den Code folgende Informationen über Aufträge in dem Django-Shell zu erhalten:

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() 

Hier shop.shop_url ist die Shop-URL, trackpost ist der Name meiner App und shop.password wird das Passwort benötigt ("Oh, wirklich?") verbinden. Das Passwort wird von MD5 generiert (das ist eine InSales-Regel). Und hier bekomme ich einen Fehler:

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' 

Ich habe schon alles auf Fehler überprüft. Das Passwort wird korrekt generiert (gemäß offizieller Dokumentation), die Shop-URL ist korrekt und alle Methoden aus der Lib werden korrekt verwendet. Der technische Support von InSales antwortet nicht, daher weiß ich jetzt nicht, was passiert.

Ich möchte nicht, dass Sie dieses Problem debuggen, aber ich möchte wissen, was den 404-Fehler verursachen kann (ausgenommen offensichtliche Dinge, wie falsche URL oder Passwort). Danke an alle die versuchen zu antworten.

Antwort

0

Analyse des pyinsales Code auf Github, erkennen ich, dass url Domain ein Sub-Domain Name auf myinsales sein sollte, so dass, wenn die vollständige URL ist http://shop.myinsales.ru/ dann das erste Argument in pyinsales sollte shop sein. Das ist schade, dass niemand, der an dem Modul arbeitet, darauf hingewiesen hat, dass in readme, aber solche Dinge passieren

0

404 bedeutet, dass der Server nicht finden konnte, was Sie angefordert haben.

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

So ist es nicht ein Authentifizierungsproblem, wie es scheint, gibt es keine Aufträge an diesem bestimmten Endpunkt sind.

Haben Sie versucht, das Paket python "requests" zu verwenden, anstatt das Modul "pyinsales" zu verwenden, um Daten direkt vom Endpunkt anzufordern? Auf diese Weise können Sie Ihre eigenen Header usw. anpassen.

Sie können auch versuchen, die Endpunkte in einem Programm wie Postboten zu testen, um sicherzustellen, dass die Endpunkte gültig sind, bevor Sie versuchen, sie programmgesteuert zu treffen.

+0

Nun, das ist zu offensichtlich (ich wette jeder weiß, was 404 ist). Was ist lustig - ich habe die Kontrolle über den Laden. Ich bin mir sicher, dass da ** Objekte sind. Die Verwendung von 'Anfragen' ist ziemlich unangenehm, wenn es ein offizielles Modul gibt, also wollte ich es nicht benutzen. Aber trotzdem danke –

+0

Haben Sie sichergestellt, dass der Endpunkt selbst funktioniert? Wenn Sie versuchen, den Endpunkt mit Curl oder einem Programm wie Postboten zu treffen, funktioniert es? – jasonleehodges

+0

Nun, das ist ziemlich schwer zu überprüfen, weil InSales eine sehr private und gut ... geschlossene Plattform ist. Aber ich bin sicher, dass der Endpunkt funktioniert, weil die Site selbst funktioniert und mit vielen anderen Apps funktioniert, die dieselbe API verwenden –

Verwandte Themen