2017-06-13 110 views
0

我想用cURL重現一個Ajax請求,但總是失敗。 服務器根本沒有發送發送的數據(以下示例中的my_data)。用cURL重現Ajax請求

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

我也試過:

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

最後:

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

的數據永遠不會被服務器(Symfony的在我的情況)抓獲。我想有一個XMLHttpRequest格式在cURL中的問題,我想知道我試圖做什麼甚至可能(這意味着通過cURL XMLHttpRequest對象的正確格式)

我爬網幾個小時,到目前爲止,沒有發現任何有數據參數

感謝您的幫助

編輯

發現的解決方案由於人們註釋部分是:

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

IS路由設置爲接收' POST'和跨域來自你的域名? – 1252748

+0

如果你只是輸入'curl',會發生什麼情況?http://example.org/ajax_call'-d my_data = data_value'並讓'curl'嘗試與服務器一起工作?如果有效,請使用'curl -v'http://example.org/ajax_call'-d my_data = data_value'再次嘗試,然後查看爲Content-Type,Accept和任何其他相關頭文件設置了什麼值。 – hmedia1

+0

你給'curl'的選項越少,它會嘗試爲你工作的越多。例如,如果添加'-d data = value'參數,'curl'會自動使其成爲'POST'請求​​,而不指定'-X POST'。有時它可以幫助API瞭解什麼可行,什麼不可行,什麼設置很重要,什麼設置被忽略。等等。 – hmedia1

回答

0

你所有的捲曲請求有效,並且可以進行處理。在Symfony的應用程序控制器,可以通過方法getContent()訪問發送JSON對象Request對象:

/** 
* @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); 
} 

在開發人員工具欄中您的要求是這樣的:

enter image description here