2017-06-13 8 views
0

Ich versuche, eine Ajax-Anfrage mit CURL zu reproduzieren, aber es ist immer fehlgeschlagen. Der Server sieht die gesendeten Daten (my_data in den folgenden Beispielen) überhaupt nicht.Reproduzieren Ajax-Anfrage mit CURL

curl \ 
    --request POST \ 
    --header 'Content-type: application/json' \ 
    --header 'X-Requested-With: XMLHttpRequest' \ 
    --url 'http://example.org/ajax_call' \ 
    --data '{"my_data":"data_value"}' 

ich auch versucht:

curl \ 
    --request POST \ 
    --header 'Content-type: application/json' \ 
    --header 'X-Requested-With: XMLHttpRequest' \ 
    --url 'http://example.org/ajax_call' \ 
    --data "my_data":"data_value" 

Und schließlich:

curl \ 
    --request POST \ 
    --header 'Content-type: application/json' \ 
    --header 'X-Requested-With: XMLHttpRequest' \ 
    --url 'http://example.org/ajax_call' \ 
    -F "my_data=data_value" 

Die Daten werden nie vom Server (Symfony in meinem Fall) gefangen. Ich denke, es gibt ein Problem mit XMLHttpRequest Formatierung in cURL und ich frage mich, ob was ich versuche zu tun ist sogar möglich (dh ordnungsgemäße Formatierung von XMLHttpRequest Objekt von cURL)

Ich kroch das Netz für Stunden und Port ' t bisher nichts mit Datenparametern gefunden.

Danke für Ihre Hilfe gefunden

EDIT

Lösung dank Menschen in Kommentarbereich war:

curl -v \ 
    --header 'X-Requested-With: XMLHttpRequest' \ 
    'http://example.org/ajax_call' \ 
    -d my_data=data_value 
+1

Ist Route erhalten einrichten ' POST' und kreuzen Sie den Ursprung Ihrer Domain an? – 1252748

+0

Was passiert, wenn Sie nur 'curl 'eingeben http://example.org/ajax_call' -d my_data = data_value' und lassen Sie' curl' versuchen, es mit dem Server auszuprobieren? Wenn es funktioniert, versuchen Sie es erneut mit 'curl -v 'http://example.org/ajax_call' -d my_data = data_value' und sehen Sie sich an, welche Werte für Content-Type, Accept und alle anderen relevanten Header festgelegt wurden. – hmedia1

+0

Je weniger Optionen Sie 'curl' geben, desto mehr wird es versuchen, es für Sie auszuarbeiten. Wenn Sie zum Beispiel das Argument '-d data = value' hinzufügen, wird' curl' automatisch eine 'POST' Anfrage machen, ohne' -X POST' zu spezifizieren. Manchmal hilft es bei APIs zu sehen, was funktioniert, was nicht, welche Einstellungen wichtig sind und welche Einstellungen ignoriert werden. usw. – hmedia1

Antwort

0

Alle Ihre cURL Anfragen gültig sind und verarbeitet werden können. In Symfony App Controller können Sie gesendet JSON-Objekt durch die Methode zugreifen getContent() von Request-Objekt:

/** 
* @Route("/ajax_call", name="some_action") 
*/ 
public function someAction(Request $request) 
{ 
    if ('' !== $content = $request->getContent()) { 
     $data = json_decode($content); 
     // some action… 
    } 

    return new Response(null, Response::HTTP_BAD_REQUEST); 
} 

In Developer Toolbar Ihre Anfrage wie folgt aussehen:

enter image description here