如果我使用瀏覽器向服務器發送信息(例如使用登錄,密碼頁面),我只需填寫用戶文本框和密碼文本框並單擊登錄按鈕即可。如何以編程方式發送帶請求的HTTP請求?
我想發送此信息,但不必使用瀏覽器。我想'填充'的文本框,但不必手動在瀏覽器中。可能會使用Servlet。
我的問題是:如何發送文本框中的信息,例如,到一個網站,從一個Servlet做到這一點?
如果我使用瀏覽器向服務器發送信息(例如使用登錄,密碼頁面),我只需填寫用戶文本框和密碼文本框並單擊登錄按鈕即可。如何以編程方式發送帶請求的HTTP請求?
我想發送此信息,但不必使用瀏覽器。我想'填充'的文本框,但不必手動在瀏覽器中。可能會使用Servlet。
我的問題是:如何發送文本框中的信息,例如,到一個網站,從一個Servlet做到這一點?
爲什麼不乾脆讓使用URL像http://your.domain.name/your/servlet/path?userFieldName=THE_VALUE_YOU_WANT_TO_PASS&passwdFieldName=PASSWORD
這個servlet會覺得,值從那些箱子來到URL從Java調用。
或者您可能想要潛入Apache HTTP Client以模仿客戶發送的請求。
呃..哦..你在做功能測試嗎?爲什麼不看看JMeter?
更新爲根據註釋
你需要知道what actually form submission does?它基本上形成的鍵值(KV)對組成的查詢字符串。
所以,如果你有一個文本字段命名tfield
其中用戶鍵入some text
,並有向下命名下降,ddfield
其中用戶選擇optionX
具有價值optionX-Val
。這種形式被提交給一個URL,http://my.domain.name/my/servlet
- 瀏覽器會發送一個請求,這將看起來像
http://my.domain.name/my/servlet?tfield=some%20text&ddfield=optionX-Val
如果你想模仿表單提交,你必須手動創建具有請求字符串的URL含所有字段和它們的值作爲FIELD_NAME = fieldValue方法有序對由符號(&)分離
啊,好主意。如果您使用Firebug(Firefox擴展),請在Firebug中打開NET面板,手動提交您想要模仿的表單。查看提交表單時發佈的請求。它將具有您正在使用的確切的URL格式。複製此網址,替換值並儘可能多地提交虛假提交。
希望這會有所幫助。
最可能解決方案 – 2011-05-09 07:27:59
好的,這是萬一我有文本框,但是怎麼樣的列表框?它的工作原理是否一樣?還是有區別? – fernandohur 2011-05-09 16:47:59
@pictureyournews更新了答案。 – Nishant 2011-05-09 18:14:04
一個servlet處理另一端:它基本上是一個處理servlet容器內的http請求的處理程序。如果我正確理解你,你想發送一個http請求。你可以使用像curl
這樣的命令行工具來做到這一點,或者如果你想留在java land中,你可以試試this example on exampledepot。使用您最喜愛的搜索引擎搜索更多示例,例如帶有搜索條件,如「通過URL發送GET請求」。
在您的情況下,您需要發送用戶名和密碼信息,您需要查看html並找到form
元素的action
屬性的url。然後,您需要找到用戶名和密碼字段的名稱。使用這些名稱作爲url參數,可以構建一個模仿發送表單的GET請求。
注意:通常以純文本形式在代碼中存儲密碼和/或以純文本格式將其發送到網站不是一件好事。
我不清楚你真的想要什麼。我假設這個servlet將是發送數據的人。這裏有一些例子。
使用的setAttribute然後將請求轉發
//On your servlet
request.setAttibute('user', 'admin');
request.setAttribute('password', '123');
getServletContext().getRequestDispatcher("page.jsp").forward(request, response);
//On your jsp page get the value using EL
<span>${user}</span>
使用會話
//On your servlet
HttpSession session = request.getSession(true);
session.setAttribute('user', 'admin');
session.setAttribute('password', '123');
getServletContext().getRequestDispatcher("page.jsp").forward(request, response);
//On your jsp page get the value using EL
<span>${user}</span>
上面的例子旨在向Web應用程序中工作。將信息發送給預計請求的其他Web應用程序。見下面的示例。
//On your jsp or servlet, you can also do the same within web application
request.sendRedirect('http://example.com?user=admin&password=123');
//on your jsp @example.com
<span>${param.user}</span>
如果這不是你的意思,增加更多的細節將是一個幫助。
爲了防止任何人感興趣,Firefox有一個名爲Tamper數據的插件。有了它,你可以停止發送和http請求並修改它。它會向你顯示發送參數所需的「url」,它們當前所具有的值以及它們的名稱。你可以看看here。之後,您可以使用request.sendRedirect('url you got from Tamper Data');
請參閱:http://stackoverflow.com/questions/2793150/how-to-use-java-net-urlconnection-to-fire-and-handle-http-requests – BalusC 2011-05-09 12:21:23