如何对 CSV 数据进行 curl POST?
How to do curl POST of CSV data?
假设我有以下 CSV 数据:
fruit.csv
fruit,count,
Apples,152,
Bananas,23,
我如何将以下形式的 curl
命令写入 post 该数据?
curl --request POST \
--url 'https://script.google.com/macros/s/IDENTIFIER/exec?param1=1¶m2=2' \
--header 'content-type: application/json' \
--data '{"json": true}'
具体来说,参数字符串,headers和其他选项是什么样子的?
- 您想使用 curl 命令将 CSV 文件上传到 Google Apps 脚本的 Web 应用程序。
- 根据
https://script.google.com/macros/s/IDENTIFIER/exec?param1=1¶m2=2
的 URL,我了解到您正在使用 Google Apps Script 的网络应用程序。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
- 在你的情况下,它使用 curl 命令选项的
--data-binary
来上传文件。
- 在 Web Apps 中,它使用
Utilities.parseCsv()
来解析 CSV 数据。
示例卷曲:
curl -L --data-binary @sample.csv "https://script.google.com/macros/s/###/exec"
sample.csv
是 CSV 文件名。使用 @
. 读取文件
- 通过
--data-binary
,可以通过包含换行符上传CSV数据。如果使用 -d
,则不能包含换行符。所以请注意这一点。
-L
是重定向。当使用curl命令访问Web Apps时,需要使用该选项。这样,返回ContentService.createTextOutput("ok")
的ok
。
示例脚本:Google Apps 脚本
function doPost(e) {
var csv = Utilities.parseCsv(e.postData.contents);
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
sheet.getRange(sheet.getLastRow() + 1, 1, csv.length, csv[0].length).setValues(csv);
return ContentService.createTextOutput("ok");
}
- 通过上面的脚本,当示例curl命令为运行时,上传
sample.csv
,上传的数据被Utilities.parseCsv()
解析。然后,将解析后的值放入活动 Spreadsheet. 的 sheet Sheet1
- 如果分隔符不是
,
,请设置为parseCsv(csv, delimiter)
。
示例情况:
当以下 CSV 文件 (sample.csv
) 上传到上述 Web Apps 时 curl -L --data-binary @sample.csv "https://script.google.com/macros/s/###/exec"
,
a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
a3,b3,c3,d3,e3
a4,b4,c4,d4,e4
a5,b5,c5,d5,e5
a6,b6,c6,d6,e6
a7,b7,c7,d7,e7
a8,b8,c8,d8,e8
a9,b9,c9,d9,e9
a10,b10,c10,d10,e10
可以检索以下事件对象。所以CSV数据可以解析为Utilities.parseCsv(e.postData.contents)
.
{
"parameter": {
"a1,b1,c1,d1,e1\r\na2,b2,c2,d2,e2\r\na3,b3,c3,d3,e3\r\na4,b4,c4,d4,e4\r\na5,b5,c5,d5,e5\r\na6,b6,c6,d6,e6\r\na7,b7,c7,d7,e7\r\na8,b8,c8,d8,e8\r\na9,b9,c9,d9,e9\r\na10,b10,c10,d10,e10\r\n": ""
},
"contextPath": "",
"contentLength": 165,
"queryString": "",
"parameters": {
"a1,b1,c1,d1,e1\r\na2,b2,c2,d2,e2\r\na3,b3,c3,d3,e3\r\na4,b4,c4,d4,e4\r\na5,b5,c5,d5,e5\r\na6,b6,c6,d6,e6\r\na7,b7,c7,d7,e7\r\na8,b8,c8,d8,e8\r\na9,b9,c9,d9,e9\r\na10,b10,c10,d10,e10\r\n": [
""
]
},
"postData": {
"type": "application/x-www-form-urlencoded",
"length": 165,
"contents": "a1,b1,c1,d1,e1\r\na2,b2,c2,d2,e2\r\na3,b3,c3,d3,e3\r\na4,b4,c4,d4,e4\r\na5,b5,c5,d5,e5\r\na6,b6,c6,d6,e6\r\na7,b7,c7,d7,e7\r\na8,b8,c8,d8,e8\r\na9,b9,c9,d9,e9\r\na10,b10,c10,d10,e10\r\n",
"name": "postData"
}
}
注:
- 当您修改Web Apps的脚本时,请重新部署Web Apps。这样,最新的脚本就会反映到 Web 应用程序中。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
假设我有以下 CSV 数据:
fruit.csvfruit,count,
Apples,152,
Bananas,23,
我如何将以下形式的 curl
命令写入 post 该数据?
curl --request POST \
--url 'https://script.google.com/macros/s/IDENTIFIER/exec?param1=1¶m2=2' \
--header 'content-type: application/json' \
--data '{"json": true}'
具体来说,参数字符串,headers和其他选项是什么样子的?
- 您想使用 curl 命令将 CSV 文件上传到 Google Apps 脚本的 Web 应用程序。
- 根据
https://script.google.com/macros/s/IDENTIFIER/exec?param1=1¶m2=2
的 URL,我了解到您正在使用 Google Apps Script 的网络应用程序。
- 根据
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
- 在你的情况下,它使用 curl 命令选项的
--data-binary
来上传文件。 - 在 Web Apps 中,它使用
Utilities.parseCsv()
来解析 CSV 数据。
示例卷曲:
curl -L --data-binary @sample.csv "https://script.google.com/macros/s/###/exec"
sample.csv
是 CSV 文件名。使用@
. 读取文件
- 通过
--data-binary
,可以通过包含换行符上传CSV数据。如果使用-d
,则不能包含换行符。所以请注意这一点。 -L
是重定向。当使用curl命令访问Web Apps时,需要使用该选项。这样,返回ContentService.createTextOutput("ok")
的ok
。
示例脚本:Google Apps 脚本
function doPost(e) {
var csv = Utilities.parseCsv(e.postData.contents);
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
sheet.getRange(sheet.getLastRow() + 1, 1, csv.length, csv[0].length).setValues(csv);
return ContentService.createTextOutput("ok");
}
- 通过上面的脚本,当示例curl命令为运行时,上传
sample.csv
,上传的数据被Utilities.parseCsv()
解析。然后,将解析后的值放入活动 Spreadsheet. 的 sheet - 如果分隔符不是
,
,请设置为parseCsv(csv, delimiter)
。
Sheet1
示例情况:
当以下 CSV 文件 (sample.csv
) 上传到上述 Web Apps 时 curl -L --data-binary @sample.csv "https://script.google.com/macros/s/###/exec"
,
a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
a3,b3,c3,d3,e3
a4,b4,c4,d4,e4
a5,b5,c5,d5,e5
a6,b6,c6,d6,e6
a7,b7,c7,d7,e7
a8,b8,c8,d8,e8
a9,b9,c9,d9,e9
a10,b10,c10,d10,e10
可以检索以下事件对象。所以CSV数据可以解析为Utilities.parseCsv(e.postData.contents)
.
{
"parameter": {
"a1,b1,c1,d1,e1\r\na2,b2,c2,d2,e2\r\na3,b3,c3,d3,e3\r\na4,b4,c4,d4,e4\r\na5,b5,c5,d5,e5\r\na6,b6,c6,d6,e6\r\na7,b7,c7,d7,e7\r\na8,b8,c8,d8,e8\r\na9,b9,c9,d9,e9\r\na10,b10,c10,d10,e10\r\n": ""
},
"contextPath": "",
"contentLength": 165,
"queryString": "",
"parameters": {
"a1,b1,c1,d1,e1\r\na2,b2,c2,d2,e2\r\na3,b3,c3,d3,e3\r\na4,b4,c4,d4,e4\r\na5,b5,c5,d5,e5\r\na6,b6,c6,d6,e6\r\na7,b7,c7,d7,e7\r\na8,b8,c8,d8,e8\r\na9,b9,c9,d9,e9\r\na10,b10,c10,d10,e10\r\n": [
""
]
},
"postData": {
"type": "application/x-www-form-urlencoded",
"length": 165,
"contents": "a1,b1,c1,d1,e1\r\na2,b2,c2,d2,e2\r\na3,b3,c3,d3,e3\r\na4,b4,c4,d4,e4\r\na5,b5,c5,d5,e5\r\na6,b6,c6,d6,e6\r\na7,b7,c7,d7,e7\r\na8,b8,c8,d8,e8\r\na9,b9,c9,d9,e9\r\na10,b10,c10,d10,e10\r\n",
"name": "postData"
}
}
注:
- 当您修改Web Apps的脚本时,请重新部署Web Apps。这样,最新的脚本就会反映到 Web 应用程序中。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。