5

次のコードがあります。

    http = Net::HTTP.new("www.something.com", 80)
    http.set_debug_output($stdout)
    http.post("/blah", "something", {'random-parameter' => 'value1="something",value2="somethingelse"'})

次に、stdout からの出力を読み取ると、次のようになります。

<- "POST /blah HTTP/1.1\r\nAccept: */*\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\nrandom-parameter: value1=\"something\",value2=\"somethingelse\"\r\nContent-Length: 9\r\nHost: www.something.com\r\n\r\n"
<- "something"

引用符がエスケープされています。問題は、スラッシュがサーバーに送信されているように見えることです。サーバーはそれを好みません。というエラーが表示されます

Unknown value for random-parameter in header: {value1=\\\"something\\\"value2=\\\"somethingelse\\\"}

私の質問は、Net::HTTP にこれらのスラッシュを挿入しないように指示したり、ヘッダーを送信する前にスラッシュを削除したりする方法はありますか?

説明:

Rails 2.0.2 で Ruby 1.8.7 を使用しています。

文字をエスケープしているのはRailsかもしれないと思いますが、それを止める方法がわかりません。

4

2 に答える 2

2

ヘッダーを正しく作成していますか? Net::HTTP は、リクエストを送信するときに引用符を引用しません。たとえば、netcat (nc) を使用して簡単に確認できます。

ターミナル1:

> nc -v -l -p 2323

ターミナル 2 (irb 内):

> http = Net::HTTP.new("localhost", 2323)
> http.post("/blah", "something", {'random-parameter' => ... )

結果 (ターミナル 1):

listening on [any] 2323 ...
connect to [127.0.0.1] from localhost [127.0.0.1] 37598
POST /blah HTTP/1.1
Connection: close
Accept: */*
Random-Parameter: value1="something",value2="somethingelse"
Content-Type: application/x-www-form-urlencoded
Content-Length: 9
Host: localhost:2323

something

あなたが実際にやりたいことは (確かではありませんが、私は推測しています)、HTTP 仕様に沿ったものだと思います:

> http.post("/blah", "something", {
    'random-parameter' => 'value1="something"; value2="somethingelse"' })

Rails はおそらく、最初の value1=... を値全体として解釈します.おそらく、値を「,」ではなく「;」で区切る必要がある場合。

また、通常はリクエスト ヘッダーを介してパラメータを渡さないことにも注意してください。しかし、それがこの場合にやりたいことかもしれません(?) そうでない場合は、param1=foo¶m2=bar のように URL 自体にパラメーターを渡すか、x-www-form-urlencoded を使用してパラメーターを渡す必要があります。

チート シートについては、こちらを参照してください:
http://www.rubyinside.com/nethttp-cheat-sheet-2940.html

于 2011-07-01T18:21:33.240 に答える
0

名前と値のペアが「ランダムパラメーター」の値であるため、エスケープする必要があるという問題ではありません。

コントローラーメソッドのランダムパラメーター値を検査すると、スラッシュがないことが予想されます-コードをデバッグするか、パラメーターを出力して、受信内容を確認できますか?

于 2011-06-27T13:39:21.797 に答える