2010-06-01 32 views
4

我想在android中以編程方式提交表單。我不希望用戶與網絡瀏覽器進行任何交互。用戶將在EditField中提供輸入,然後通過HTTPwebmethod通過http post方法提交輸入。但我沒有取得任何成功。請指教。我在java中使用過HTMLUnit,但它不適用於android。以編程方式在android中提交html表格

final WebClient webClient = new WebClient(); 
final HtmlPage page1 = webClient.getPage("http://www.mail.example.com"); 
    final HtmlForm form = page1.getHtmlElementById("loginform"); 

    final HtmlSubmitInput button = form.getInputByName("btrn"); 
    final HtmlTextInput textField1 = form.getElementById("user"); 
    final HtmlPasswordInput textField2 =   form.getElementById("password");textField1.setValueAttribute("user.name"); 
    textField2.setValueAttribute("pass.word"); final HtmlPage page2 = button.click(); 
+0

你在正確的軌道上。你嘗試了什麼代碼,以及你收到了什麼錯誤信息?你是否也在託管接收端?你可以使用fiddler工具或wireshark攔截模擬器的請求嗎? – 2010-06-01 12:51:53

+0

代碼在原始問題中發佈,但在編譯時,HTTPUnit lib不會轉換爲dalvik代碼。我認爲它應該在服務器上執行。不在模擬器中。 – Maneesh 2010-06-01 13:11:06

回答

11

糟糕。抱歉。看起來你正嘗試通過瀏覽器POST POST。

這是我一直在使用來實現HTTP POST的Android中,而無需通過網絡瀏覽器去一個片段:

HttpClient httpClient = new DefaultHttpClient(); 
HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), TIMEOUT_MS); 
HttpConnectionParams.setSoTimeout(httpClient.getParams(), TIMEOUT_MS); 
HttpPost httpPost = new HttpPost(url); 
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
nameValuePairs.add(new BasicNameValuePair("name1", "value1")); 
nameValuePairs.add(new BasicNameValuePair("name2", "value2")); 
nameValuePairs.add(new BasicNameValuePair("name3", "value3")); 
// etc... 
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
HttpResponse response = httpClient.execute(httpPost); 

我覺得應該對你想要做什麼工作。我設置爲10000 TIMEOUT_MS(因此,10秒)

然後你可以使用這樣的讀出服務器的響應:

BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()), 8096); 
+0

我會做post方法,但實際上並沒有提交登錄表單。我需要通過代碼提交已經創建的登錄頁面,而無需實際打開瀏覽器。 – Maneesh 2010-06-02 08:01:56

+1

重要的是要注意,上面的代碼需要包含在try-catch塊中並從後臺線程執行。 – BeccaP 2014-04-09 23:00:02

+0

這甚至可以在登錄頁面上工作嗎? – reubenjohn 2014-10-09 06:44:46