2013-01-08 69 views
1

我需要創建一個有點怪異(寬鬆地說)格式的post請求。要被髮送的確切的請求應以下列格式在rails中的POST請求

https://xyz.com/ping?app_id= adv_id = 345 &事件=出售& EVENT_DATA = 「AMT = 30_USD; USER_ID = 204050」

它容易發送POST請求到以下格式的URL: -

https://xyz.com/ping?app_id= adv_id = 345 &事件=出售& AMT = 30_USD & USER_ID = 204050

這可以通過使用這樣的代碼來實現: -

Net::HTTP.post_form(URI.parse("http://xyz.com/ping"), params) 

其中,被適當地填充PARAMS變量(散列)。

我應該對正常情況下的這種變化進行哪些修改,特別是考慮到事件數據的雙引號。

+0

爲什麼你使用'post_form'上請求僞造保護第8節)?這是否需要作爲POST請求?你想要的格式實際上是由GET請求使用的,而POST參數不是URL的一部分,而是嵌入在表單主體 – PinnyM

+0

我需要發佈一個請求(最好是因爲我正在用另一個站點ping一些數據)。另外,即使我要提出請求,該如何工作? –

回答

0

您需要確保event_data參數已正確轉義才能執行此操作。我很確定調用post_form會爲你做到這一點。

params["app_id"] = 123 
params["adv_id"] = 345 
params["event"] = 'sale' 
params["event_data"] = '"amt=30_USD;user_id=204050"' 
Net::HTTP.post_form(URI.parse("http://notify.tapsense.com/ads/ping"), params) 

這應該或多或少地爲你做。

+0

我應該如何測試形成的實際url,因爲這是從服務器端發出的post請求。 –

+0

@ user523146:我沒有看到一個簡單的方法來做到這一點沒有嘲笑,因爲你需要檢查HTTPRequest的內部。你會使用哪個模擬框架? – PinnyM

+0

我不知道。我試圖看看ActiveResource :: HttpMock是否可以工作,但看起來不是這樣。 –

1

閱讀並修改以下鏈接中的信息。經過他們之後,我可以推導出4種可能的方式來做到這一點:

  1. 使用機械化。請參閱鏈接1
  2. 使用Net :: HTTP從您的控制器發出發佈請求。見鏈接2 - 3(第三個答案)。
  3. 包含散列或數組的表單數據。請參閱鏈接4 - 7
  4. 向您的表單添加隱藏字段,該字段將包含額外的數據。見鏈接8
  5. 使用PARAMS合併模式即鏈路9

Using Ruby/Rails To Programmatically Post Form Data To Another Site

Submitting POST data from the controller in rails to another website

Post and redirect to external site from Rails controller?

http://rails.nuvvo.com/lesson/6371-action-controller-parameters

http://www.developer.com/lang/rubyrails/article.php/3804081/Techniques-to-Pass-and-Read-URL-Parameters-Using-Rails.htm

http://guides.rubyonrails.org/action_controller_overview.htm(第3節。1個Hash和數組參數,然後

Rails: How do I make a form submit an array of records?

Ruby on Rails: Submitting an array in a form

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-hidden_field

Send querystring params as part of form post