asynctask setRequestMethod для публикации не работает - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь сделать POST-запрос в AsyncTask, но метод запроса все время остается как GET.

У меня есть эта проблема, так как я переместил HTTP-запрос в AsyncTask, тот же код работал раньше, когда это было в потоке пользовательского интерфейса.

Код 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 голосов
/ 30 ноября 2018

У меня была такая же проблема, для меня это случилось, потому что я не указал полный путь URL.

Есть два способа исправить это.Первый способ - указать full urlfile.php в конце), а второй - rewrite URL в конфигурации веб-сервера.

Я исправил его с помощью rewritingURL в моем веб-сервере.Это для 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

...