asynctask setRequestMethod发布不起作用

时间:2018-06-24 10:19:57

标签: android post android-asynctask httpconnection

我正在尝试在AsyncTask中发出POST请求,但是请求方法始终保持为GET。

我遇到了这个问题,因为我将HTTP请求移到了AsyncTask,当时它在UI线程中时,以前的代码是相同的。

doInBackground代码如下:

protected String doInBackground(String... string) {

        httpPostToArduino (string[0]);


        return null;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute ();
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute (s);
    }

    public void httpPostToArduino(String message){

        curArd1UrlString="http://myprivateurl.com";
        URL url = null;
        try {
            url = new URL (curArd1UrlString);
        } catch (MalformedURLException e) {
            e.printStackTrace ();
        }
        HttpURLConnection urlConnection = null;
        BufferedReader reader = null;

        StringBuilder result = new StringBuilder (); //test

        try {
            urlConnection = (HttpURLConnection) url.openConnection ();

            //Set header content
            urlConnection.setRequestMethod("POST");
            urlConnection.setRequestProperty("Authorization","password");
            urlConnection.setDoOutput(true);

            //Set body content
            OutputStreamWriter os = new OutputStreamWriter (urlConnection.getOutputStream());
            os.write(message.toString ());
            os.flush();

            InputStream in = new BufferedInputStream (urlConnection.getInputStream ());

            reader = new BufferedReader (new InputStreamReader (in));

            //Read the first line of the response - just the JSON
            result.append (reader.readLine ());

            //The below WHILE reads all the content of the response message, but we only need the first line

            String ReceivedJSON = result.toString ();

            JSONObject parentObject = new JSONObject (ReceivedJSON);

在调试器的urlConnection下,对于方法字段,该字段始终为GET。下面是调试器模式的片段,更加清晰。

snip

每个请求后都会收到响应,但是响应取决于POST请求的正文内容。

为了将请求方法更改为POST,我应该在代码中进行哪些更改?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,因为我没有指定完整的URL路径,所以发生了这个问题。

有两种方法可以解决此问题。第一种方法是指定full url(末尾为file.php),第二种方法是在Web服务器配置中指定rewrite的网址。

我通过rewriting网络服务器中的URL对其进行了修复。这是给nginx的。

这会将.php添加到请求的URL的末尾。

location /api {
                rewrite ^(/api/.*)/(\w+) $1/$2.php last;
        }

例如,您拥有Url http://example.com/api/v1/file。指定重写后,该URL将被重写为http://www.example.com/api/v1/file.php