【问题标题】:Fill form from Java Android and send Request从 Java Android 填写表格并发送请求
【发布时间】:2014-05-29 15:23:48
【问题描述】:

我正在尝试从适用于 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);     
}

【问题讨论】:

    标签: java android http lua


    【解决方案1】:

    在我们讨论您的代码之前,我有一堆问题,因为您在这里所做的似乎是正确的。

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

    将这行代码添加到你的 androidManifest.xml

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

    但在此之前,您必须检查您传递给 HttpPost 对象的链接是否有效,您可以使用网络浏览器对其进行测试,因为我现在才这样做,但似乎它不起作用! !

    【讨论】:

    • 您好,我添加了权限,但仍然无法使用。该链接有效,我可以打开它,并且 SID 是正确的。我不知道问题出在哪里。
    猜你喜欢
    • 2020-07-13
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多