2011-06-22 14 views
5

私は、次のコードを持っている:引用符はエスケープされているとRuby Net :: HTTP - 自動的に引用符をエスケープしないでください。

<- "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" 

:私はSTDOUTからの出力を読んだとき

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

はその後、それはこのようになります。問題は、スラッシュがサーバーに送信されているように見えることです。私ははネット:: HTTPをそれらのスラッシュを挿入、またはヘッダを送信する前にそれらを取り除くしないように指示する方法があり、

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

だから私の質問があると言うエラーを取得していますか?

明確化:

私はRailsの2.0.2とRubyの1.8.7を使用しています。

私はそれが文字をエスケープしているレールかもしれないと思うが、私はそれを止める方法がわからない。

答えて

2

ヘッダーを正しく構築していますか? Net :: HTTPは要求を送信するときに引用符を引用しません。

ターミナル1:

> nc -v -l -p 2323 

第2ターミナル(IRBで):

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

結果(端子1):簡単に(NC)例えば、netcatをするため使用することによってそれを確認することができ

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.post("/blah", "something", { 
    'random-parameter' => 'value1="something"; value2="somethingelse"' }) 

Railsは、おそらくあなたはおそらくと値を区切るために必要な全体value..whenとして= ...あなたの最初のVALUE1を解釈される「;」、ありません「」。

通常、リクエストヘッダーでパラメータを渡すことはありません。しかし、それはあなたがこの場合にしたいことでしょうか?そうでなければ、param1 = foo & param2 = barのようにURLにパラメータを渡すか、x-www-form-urlencodedを使ってパラメータを渡すかのいずれかです。

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

0

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

コントローラーメソッドでランダムパラメーターの値を調べてスラッシュを持たないと思ったら、コードをデバッグしたり、パラメーターを表示して何が受信されているかを確認できますか?

関連する問題