2010-06-01 25 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