,我在下面的bash腳本使用捲曲成JSON文件推給Tomcat坐在後面的nginx運行的REST API。
while IFS= read -d '' -r file; do
base=$(basename "$file")
datetime=$(find $file -maxdepth 0 -printf "%TY/%Tm/%Td %TH:%TM:%.2TS")
curl -vX POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" \
-d @"$file" -u vangeeij:eian12 \
"http://192.168.105.10/homeaccess/services/aCStats/uploadData?username=vangeeij&filename=$base&datetime=$datetime"
#sudo mv "$file" /home/vangeeij/acserver/resultsOld
done < <(sudo find . -type f -print0)
問題
運行此腳本,我得到一個HTTP 400響應,捲曲的錯誤:
curl: (18) transfer closed with outstanding read data remaining
我已經試過
我發現兩件事。首先通過Postman運行相同的URL和主體會生成一個成功的POST。
我發現這個錯誤消失,當最後一個參數從URL刪除&datetime=$datetime
我也發現了這個錯誤,並設置一個捲曲的選項類似
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Expect:'));
但之間的連接數我不知道在哪裏/如何在一個簡單的bash腳本
問題
使用curl時設置這個確切我需要改變我的curl命令以擺脫錯誤並仍然能夠使用所有參數?
UPDATE
開始一個新的問題,如進一步調查使我更好地理解了這個問題。
失誤也與參數日期時間=在它的文本需要進行URL編碼結束的事實做。
這是通過與2017年%2F03%2F01%2008%3A50%3A56
更換可變證實和它的工作。
所以現在的問題是,我無法得到--data-urlencode datetime = $ datetime工作。看起來這只是附加到JSON數據或其他東西。
我會嘗試刪除 '\ n' 這一行。 datetime = $(find $ file -maxdepth 0 -printf「%TY /%Tm /%Td%TH:%TM:%。2TS \ n」)。你也可以添加-d「username = vangeeij&filename = $ base&datetime = $ datetime」並從URL中刪除它,因爲curl合併了多個-d的 – Aleksandar
我沒有注意到\ n那裏..我刪除了那個...但是錯誤依然存在。更新以上內容以反映這一點。 – DarbyM