7

Linux シェル スクリプトから CURL を使用して、SMS プロバイダー (Sybase 365) の HTTP ゲートウェイに POST しようとしています。

次のデータを渡す必要があります ([ ] と LF 文字に注意してください)

[MSISDN]
List=+12345678
[MESSAGE]
Text=Hello
[END]

-F パラメータを使用してファイルを送信すると、CURL は LF を削除します。

curl -F @myfile "http://www.sybase.com/..."

サーバーでこれが発生します(拒否されます)

[MSISDN]List=+12345678[MESSAGE]Text=Hello[END]

これを回避するためにできることはありますか、それとも別のツールが必要ですか?

テスト用に自分のデータを含むファイルを使用していますが、実際にはそれを避け、スクリプトから直接 POST したいと考えています。

4

4 に答える 4

11

--data-binaryの代わりに使ってみてください-d(ata-ascii)

マニュアルから:

--data-binary (HTTP) --data-ascii と同様の方法でデータを投稿しますが、このオプションを使用すると、投稿されたデータのコンテキスト全体がそのまま維持されます。

--data-ascii オプションの strip-newlines 機能を使用せずにバイナリ ファイルを投稿する場合は、これが最適です。このオプションを複数回使用すると、最初のオプションに続くオプションがデータを追加します。

ETA: おっと、質問をもっとよく読むべきです。-d ではなく -F を使用しています。しかし--data-binary、まだ試してみる価値があるかもしれません。

于 2008-12-23T07:44:15.030 に答える
3

-dを使用してこれを機能させました

request=`printf "[MSISDN]\nList=$number\n[MESSAGE]\nText=$message\n[END]\n"`
response=`curl -s -u $username:$password -d "$request" http://www.sybase.com/...`

奇妙なことに、-d @myfile (myfile には LF で区切られたテキストが含まれています) を使用すると、機能しません。

--data-binary も試しましたが成功しませんでした。

于 2008-12-23T09:28:23.900 に答える
3

おそらくばかげた考えですが、LFだけでなくCRLFが実際に必要だとは思いませんか?

または、-F の代わりに--data-binaryオプションを使用してみましたか?

于 2008-12-23T07:43:36.187 に答える
1
curl "url" --data-binary @myfile 

データに新しい行を投稿する[curl 7.12.1でテスト済み]

于 2010-11-24T21:34:59.853 に答える