2017-07-18 1 views
0

Ich möchte CURL API auf Python aufrufen.Calling Curl API auf Python

curl -X POST -H "Authorization:Token 00d2e3a10c82420414b2d36d28fb5afc2cd8e8a5" \ 
-H "Content-Type: application/json" \ 
-d '{"module_id":"[MODULE_ID]", "text": "example text"}' \ 
-D - \ 
https://api.tocall.com/ 

verwendet I requests Modul zur Herstellung von Anforderungs- und json Modulobjekt zu bespannen umzuwandeln. Aber ich bekomme 404.

Wo liege ich falsch?

import requests 
import json 
headers = { 
    'Authorization': 'Token 00d2e3a10c82420414b2d36d28fb5afc2cd8e8a5', 
    'Content-Type': 'application/json', 
} 
url = "https://api.tocall.com/" 
data = '{"module_id":"[MODULE_ID]", "text": "example text"}' 
response= requests.post(url, data=json.dumps(data), headers=headers) 
print(response.status_code) 

Antwort

0

Fügen Sie den Host Header, so dass die endgültige Server, auf dem virtuellen Host Route kennt die Anforderung,

Wechsel:

headers = { 
    'Authorization': 'Token 00d2e3a10c82420414b2d36d28fb5afc2cd8e8a5', 
    'Content-Type': 'application/json', 
} 

Für:

headers = { 
    'Authorization': 'Token 00d2e3a10c82420414b2d36d28fb5afc2cd8e8a5', 
    'Content-Type': 'application/json', 
    'Host' : 'api.tocall.com' 
} 

I denke, das wird dein Problem beheben. Schließlich möchten Sie vielleicht die Standard-Header aktualisieren, nicht Ihre eigenen. Versuchen Sie, die session featuresrequests konsistente Abfragen auszuführen.

Hinweis: Wie in anderen Antworten angegeben, haben Sie andere JSON-Codierungsprobleme, aber das ist nicht der Grund, warum Sie 404 erhalten.

0

Sie codieren Ihre Daten zweimal als JSON. json.dumps() nimmt ein Objekt und konvertiert es in JSON. In diesem Fall konvertieren Sie eine Zeichenfolge in JSON. Dies sollte besser funktionieren:

import requests 
headers = { 
    'Authorization': 'Token 00d2e3a10c82420414b2d36d28fb5afc2cd8e8a5', 
} 
url = "https://api.tocall.com/" 
data = {"module_id":"[MODULE_ID]", "text": "example text"} 
response= requests.post(url, json=data, headers=headers) 
print(response.status_code) 

Wenn es immer noch nicht funktioniert und Sie weitere Hilfe benötigen, sollten Sie echte Details über Ihre API enthalten, so können wir das Problem reproduzieren.

+0

Dies ist sicherlich * ein * Problem zu beheben, aber ich bin mir nicht sicher, eine schlechte Nutzlast würde einen 404-Fehler verursachen. – chepner

+0

Ich habe gesehen, APIs 404 basierend auf POST-Daten zurückgeben. Vielleicht erwartet es dort einen Bezeichner, der nicht gefunden wird. Angesichts der Menge der bereitgestellten Informationen und der Entscheidung, darauf zu vertrauen, dass in beiden Fällen die gleiche URL verwendet wurde, ist dies meine beste Schätzung. – kichik

0

verwandelt eine Python dict in eine Zeichenfolge, aber Ihre data ist bereits eine Zeichenfolge. Am einfachsten ist es, data als dict zu schreiben und dann darauf zu verwenden.

+0

Kurze und unverschlüsselte Antworten sind in Kommentaren sehr willkommen. – Fabien

+0

Es adressiert das Problem; Warum sollte ich den gesamten OP-Code neu schreiben? – jackarms

+0

Für die Qualität der Antwort. Sie zitieren ihn, Sie zeigen die Lösung. Wenn Sie Sie lesen, muss niemand OP lesen. Oder nicht. – Fabien