从Java Android填写表单并发送请求

时间:2014-04-15 10:21:31

标签: java android http lua

我正在尝试从Android的Java程序填写表单并将请求发送到服务器。首先我尝试使用Selenium for Android,但是我没有启动它,然后我发现了很多关于如何使用HttpPost等的例子,但是表单的动作是:

form name =“mainform”method =“POST”action =“/ system / boxuser_edit.lua”

所以我找到了以下代码,并尝试了许多可能的组合,但没有成功

    class SendPostReqAsyncTask extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... params) {

            String paramUsername = params[0];
            String paramPassword = params[1];

            HttpClient httpClient = new DefaultHttpClient();

    HttpConnectionParams.setConnectionTimeout(httpClient.getParams(),100000);
    HttpConnectionParams.setSoTimeout(httpClient.getParams(), 100000);
    String SID = "xxxxxxxxx";
    HttpPost httpPost = new HttpPost("http://fritz.box/system/boxuser_edit.lua?sid="+SID+"=new");

            BasicNameValuePair emailBasicNameValuePair = new BasicNameValuePair("user", paramUsername);

            BasicNameValuePair passwordBasicNameValuePair = new BasicNameValuePair("password", paramPassword);

            // We add the content that we want to pass with the POST request to as name-value pairs
            //Now we put those sending details to an ArrayList with type safe of NameValuePair
            List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
            nameValuePairList.add(usernameBasicNameValuePair);
            nameValuePairList.add(passwordBasicNameValuePair);

            try {
                // UrlEncodedFormEntity is an entity composed of a list of url-encoded pairs. 
                //This is typically useful while sending an HTTP POST request. 
                UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairList);

                // setEntity() hands the entity (here it is urlEncodedFormEntity) to the request.
                httpPost.setEntity(urlEncodedFormEntity);

                try {
                    // HttpResponse is an interface just like HttpPost.
                    //Therefore we can't initialize them
                    HttpResponse httpResponse = httpClient.execute(httpPost);

                    // According to the JAVA API, InputStream constructor do nothing. 
                    //So we can't initialize InputStream although it is not an interface
                    InputStream inputStream = httpResponse.getEntity().getContent();

                    InputStreamReader inputStreamReader = new InputStreamReader(inputStream);

                    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

                    StringBuilder stringBuilder = new StringBuilder();

                    String bufferedStrChunk = null;

                    while((bufferedStrChunk = bufferedReader.readLine()) != null){
                        stringBuilder.append(bufferedStrChunk);
                    }

                    return stringBuilder.toString();

                } catch (ClientProtocolException cpe) {
                    System.out.println("First Exception caz of HttpResponese :" + cpe);
                    cpe.printStackTrace();
                } catch (IOException ioe) {
                    System.out.println("Second Exception caz of HttpResponse :" + ioe);
                    ioe.printStackTrace();
                }

            } catch (UnsupportedEncodingException uee) {
                System.out.println("An Exception given because of UrlEncodedFormEntity argument :" + uee);
                uee.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
        }           
    }
    SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
    sendPostReqAsyncTask.execute(givenUsername, givenPassword);     
}

1 个答案:

答案 0 :(得分:0)

在我们讨论您的代码之前,我只是提出了一堆问题,因为您在此处所做的事情似乎是正确的。

首先,您是否请求在清单文件中访问网络的权限? 如果不是这样你就是这样做的:

将这行代码添加到androidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

但在此之前,您必须检查传递给HttpPost对象的链接是否正常工作,您可以使用Web浏览器对其进行测试,因为我现在只是这样做而且它似乎并没有工作!!