Linux
如何使用從文件導入的 post 數據發送 curl 請求
我有一個下面的 curl 命令,它工作正常,我得到了回复。我正在將 json 數據發佈到一個端點,該端點在點擊它後會給我回复。
curl -v 'url' -H 'Accept-Encoding: gzip, deflate, br' -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Connection: keep-alive' -H 'DNT: 1' -H 'Origin: url' --data-binary '{"query":"\n{\n data(clientId: 1234, filters: [{key: \"o\", value: 100}], key: \"world\") {\n title\n type\n pottery {\n text\n pid\n href\n count\n resource\n }\n }\n}"}' --compressed
現在我正在嘗試從
temp.txt
外部文件中讀取二進制數據,但不知何故它不起作用,我得到一個錯誤 -curl -v 'url' -H 'Accept-Encoding: gzip, deflate, br' -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Connection: keep-alive' -H 'DNT: 1' -H 'Origin: url' --data-binary "@/Users/david/Downloads/temp.txt" --compressed
以下是我
temp.txt
文件中的內容 -原始“temp.txt”文件
{ data(clientId: 1234, filters: [{key: "o", value: 100}], key: "world") { title type pottery { text pid href count resource } } }
這是我得到的錯誤 -
....... * upload completely sent off: 211 out of 211 bytes < HTTP/1.1 500 Internal Server Error < date: Fri, 28 May 2021 23:38:12 GMT < server: envoy < content-length: 0 < x-envoy-upstream-service-time: 1 < * Connection #0 to host url left intact * Closing connection 0
我做錯了什麼嗎?
temp.txt
此外,如果我在文件中複製與原始 curl 命令中完全相同的內容,\n
那麼它可以正常工作。更新了“temp.txt”文件
這意味著如果我將這樣的內容保存在
temp.txt
文件中,那麼它從我的第二次 curl 開始就可以正常工作 -{"query":"\n{\n data(clientId: 1234, filters: [{key: \"o\", value: 100}], key: \"world\") {\n title\n type\n pottery {\n text\n pid\n href\n count\n resource\n }\n }\n}"}
這意味著我需要在發送 curl 請求之前找到一種將新行
\n
從temp.txt
文件手動轉換為手動的方法,還是有其他方法?
您的數據有效負載是一個包含
query
密鑰的 JSON 文件。該鍵的值是 JSON 編碼的文件,可能描述某種形式的查詢,它本身不是 JSON 文件。換行符被編碼為\n
JSON 值,伺服器使用的 JSON 解析器會在收到您的請求時將它們轉換為文字換行符。您嘗試將解碼
query
後的值放在單獨的文件中並在curl
呼叫中傳遞它失敗了,因為您正在與之交談的 API期望數據是 JSON 文件,其中鍵的 JSON 編碼值query
。將查詢解除安裝到單獨的文件中的正確做法是完全按照您在上一個範例中所做的操作。將帶有編碼查詢的 JSON 文件放在一個文件中,並
--data-binary @filename
在curl
命令行上使用它來引用它。curl \ --header 'Content-Type: application/json' \ --data-binary '@/Users/david/Downloads/temp.txt' "$API_ENDPOINT"