Saya menjalankan panggilan curl dari ASP dengan Obyek WScript.Shell.
Set objCmd = objWShell.Exec("cmd.exe /c echo "&dataString&" | /path/to/curl --cacert '/path/to/cert/cacert.pem' -X POST"&options&" -A """&useragent&""""&referer&" -F "&fileParamName&"=@-;type="&fileMIME&";filename=^"""&filename&"^"" --url """&url&"""")
Apa yang dilakukan perintah ini adalah, mengirim permintaan ikal dengan file yang ditambahkan. Konten file berasal dari stdin
(tidak echo
) untuk tidak perlu menulis file yang sebenarnya ke hard drive.
Masalah saya adalah, sepertinya beberapa panggilan tidak berfungsi sebagaimana mestinya, karena karakter-karakter dataString
yang melanggar perintah. The dataString
berisi JSON dengan input pengguna dari database.
Isi JSON mendapatkan dikodekan sudah, sehingga karakter bisa ditransformasikan ke \b
, \t
, \n
, \f
, \r
, \"
, \/
, \\
atau dikodekan sebagai \uXXXX
karakter, meninggalkan dataString
tampak seperti ini:
{"field":"User-String with \"encoded\" characters!\r\nSome other characters look like \u00FC or \u00E4.\r\nQuestion Marks?, Exclamation Marks!, 'SingleQuotes' and who knows what!"}
Jadi ... echo {"field":"..."} | ...
akan menjadi String untuk dieksekusi.
Saya sudah mencoba sejauh ini untuk menggunakan tanda kutip ganda dan tanda kutip tunggal atau untuk melarikan diri dengan ^
tetapi tidak berfungsi dengan baik. Setidaknya jika saya mencoba mensimulasikannya echo String | cat > testfile.txt
di jendela terminal saya.
Karakter apa yang saya butuhkan untuk melarikan diri dan bagaimana caranya?
Sunting:
Karena saya memilih solusi devplayer untuk panggilan dengan transfer file, Anda mungkin berpikir saya sudah selesai. Tapi sekarang saya mendapat jenis panggilan lain tanpa transfer file dan tanpa pipa, tetapi dengan masalah input pengguna yang sama yang harus diloloskan dengan benar.
Itu seperti:
curl ... -d "<properly escaped string>" --url ...
&
dan untuk”
hanya menggunakan tanda kutip ganda seperti ini””
Jawaban:
bagaimana jika Anda meneruskan konten string panjang Anda sebagai file ke perintah Anda? Yaitu menyimpan Anda datastring dalam file.txt dan memberi makan isi file untuk perintah sebagai berikut:
?
sumber
-
. Tidak perlu< file.txt
. Tetapi ada cukup banyak "File" dan yang akan mengisi hard drive dengan sangat cepat. Saya terbatas dalam hal ruang, itu sebabnya saya mencoba tanpa file yang sebenarnya.