2

次のコマンド (およびそのバリエーション) は、Mac のターミナルで正常に実行され、Mac で実行される Ruby プログラムで正常に実行され、Windows コマンド プロンプトで直接正常に実行されますが、内部で実行しようとすると解析エラーで失敗します。 Windows 上の ruby​​ ファイル。

curl -u"user:pwd" -d"{\"name\":\"new_repo_beepo\"}" https://api.github.com/user/repos --insecure

バッククォート、%x()、およびシステムで実行しようとしました。また、文字列の置換とその部分のjson化も試みましたが、運がありませんでした。私が判断できることから、失敗のポイントは-d"{\"name\":\"repo_name\"}"セクションにありますが、それはそれなしでコマンドを試したことによるものです。とにかく、Ruby の Windows でのコマンドの各バリエーションで、JSON 解析エラーが発生します。

4

2 に答える 2

2

rest-clientを使ってみましたか?

それは宝石であり、非常にうまく機能します。おそらくsystem()or%x()を使用するよりも優れており、間違いなくより安全です (悪意のある bash コマンドを挿入できるsystem()ため、慎重に使用する必要があります)。

使い方はとても簡単です。gem をインストールして、それを ruby​​ ファイルの 1 つとして要求するだけです。

注: Rails を使用している場合は、Gemfile に追加するだけです (各ファイルでそれを要求する必要はありません)。

require 'rest_client'

RestClient.get 'https://api.github.com/user/repos', {params: {id: 50, foo: 'bar'}}

--insecuresslにいくつかのパラメーターを使用することもできます。

于 2012-05-17T20:45:39.600 に答える
1

これは、Ruby が Windows でコマンドを実行するために使用するシェル メカニズムの解析/引用の問題であると思われます。トークン化された形式のシステムを試しましたか。たとえば:

system('curl', '-u"user:pwd"', '-d"{"name":"new_repo_beepo"}"', 'https://api.github.com/user/repos', '--insecure')

シェルが邪魔にならないように、指定されたargベクトルを実行プログラムに直接送信するposixでは。おそらく同じセマンティクスがウィンドウにも当てはまります。

ruby には stdlib Net::HTTP があるため、これを行うために curl を実行する必要はありません。コメントで、jruby の下でこのモジュールに問題があると述べましたが、http[s] リクエストを問題なく実行する jruby サービスがここにあります。そのため、jruby とネイティブ http クライアントで発生した特定の問題に対処する質問を投稿してみてください。ライブラリ。

于 2012-05-17T21:22:34.040 に答える