1

Railsのデータを外部ASPに投稿する必要があります。

私のcurlコマンドは機能しています:

printf 'foo=bar\r\nparameter1=4711\r\nparameter2=4712' | curl --data-binary @- http://example.com/request.asp

net / httpでこれを行うにはどうすればよいですか?

パラメータ間に「\r\n」を保持することが重要です。

これまでの私のコーディング:

uri = URI.parse('http://example.com/request.asp')

http = Net::HTTP.new(uri.host, uri.port)

req = Net::HTTP::Post.new(url.request_uri)
req.set_form_data(params)
response = http.request(req)

パラメータを設定するにはどうすればよいですか?

私はこのようなことを試みました:

params = {
  'foo' => 'bar\r\n',
  'parameter1' => '4711\r\n',
  'parameter2' => '4712'
}

しかし、それは機能していません。エンコードする必要がありますが、どうすればよいですか?

URLエンコードされたバージョンの'\r \ n':%0D%0Aで試してみましたが、機能しませんでした。curlのようにバイナリとして送信する方法はありますか?

ありがとう。

編集:あなたの答えのおかげで私は解決策を見つけました:

uri = URI.parse('http://example.com/request.asp')

http = Net::HTTP.new(uri.host, uri.port)

req = Net::HTTP::Post.new(url.request_uri)
req.body = "foo=bar\r\nparameter1=4711\r\nparameter2=4712"
response = http.request(req)

set_form_data a)エンコードし、b)「&」を追加します。どちらも必要なものはありません。体を直接セットすることが解決策でした。

4

2 に答える 2

1

ソリューションの一部にすぎませんが、\r や \n などのエスケープされた文字を Ruby の単一引用符テキストに埋め込むことはできません。

'I like\r\nthe newlines'  # Won't work
"I like\r\nthe newlines"  # Will work

乾杯!

于 2012-06-29T14:19:09.773 に答える
1

それで問題がなければ\r\n、最初のURL 以外=は POST データでエンコードされた URL を取得できます。

params = {
   'foo' => 'bar\r\nparameter1=4711\r\nparameter2=4712'
}

主な問題は何ですか、ペアセパレーターを取り除く&か、\r\nエンコードせずに送信する必要がありますか? または両方?

于 2012-06-29T15:58:19.130 に答える