HttpURLConnection - 响应代码:400(错误请求)Android Studio - > Xserve服务器

时间:2017-03-22 17:36:35

标签: java android httpurlconnection xserver

所以我尝试通过Xserve连接到我们的数据库,此时我正试图访问用户的令牌。我使用正确的用户名和密码以及上下文类型和授权类型;我知道这是因为我已经通过google邮件管理员扩展尝试了相同的POST方法。无论出于何种原因,当我在Android上尝试相同的事情时,至少我认为是相同的,它给了我400响应代码并且不会返回任何内容。

以下是用于连接的代码:

private HttpURLConnection urlConnection;

@Override
    protected Boolean doInBackground(Void... params) {
        Boolean blnResult = false;
        StringBuilder result = new StringBuilder();
        JSONObject passing = new JSONObject();

        try {
            URL url = new URL("http://xserve.uopnet.plymouth.ac.uk/modules/INTPROJ/PRCS251M/token");

            // set up connection
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setDoInput(true);
            urlConnection.setDoOutput(true);
            urlConnection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8" );
            urlConnection.setRequestMethod("POST");
            urlConnection.connect();

            // set up parameters to pass
            passing.put("username", mEmail);
            passing.put("password", mPassword);
            passing.put("grant_type", "password");

            // add parameters to connection
            OutputStreamWriter wr= new OutputStreamWriter(urlConnection.getOutputStream());
            wr.write(passing.toString());


            // If request was good
            if (urlConnection.getResponseCode() == 200) {
                blnResult = true;
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(urlConnection.getInputStream()));
                String line;

                while ((line = reader.readLine()) != null) {
                    result.append(line);
                }
                reader.close();
            }

            //JSONObject json = new JSONObject(builder.toString());
            Log.v("Response Code", String.format("%d", urlConnection.getResponseCode()));
            Log.v("Returned String", result.toString());

        }catch( Exception e) {
            e.printStackTrace();
        }
        finally {
            urlConnection.disconnect();
        }

        return blnResult;
    }

我还没有将结果存储到JSONObject中,因为我稍后会使用它,但我希望通过" Log.v"来预期某种输出。

有什么突出的吗?

1 个答案:

答案 0 :(得分:1)

 try {
        URL url = new URL("http://xserve.uopnet.plymouth.ac.uk/modules/INTPROJ/PRCS251M/token");

        parameters = new HashMap<>();
        parameters.put("username", mEmail);
        parameters.put("password", mPassword);
        parameters.put("grant_type", "password");

        set = parameters.entrySet();
        i = set.iterator();
        postData = new StringBuilder();

        for (Map.Entry<String, String> param : parameters.entrySet()) {
            if (postData.length() != 0) {
                postData.append('&');
            }

            postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            postData.append('=');
            postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }

        postDataBytes = postData.toString().getBytes("UTF-8");

        // set up connection
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setDoInput(true);
        urlConnection.setDoOutput(true);
        urlConnection.setConnectTimeout(5000);
        urlConnection.setReadTimeout(5000);
        urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
        urlConnection.setRequestMethod("POST");
        urlConnection.getOutputStream().write(postDataBytes);

        // If request was good
        if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
            reader = new BufferedReader(
                    new InputStreamReader(urlConnection.getInputStream()));
            String line;

            while ((line = reader.readLine()) != null) {
                result.append(line);
            }
            reader.close();
        }

        Log.v("Login Response Code", String.valueOf(urlConnection.getResponseCode()));
        Log.v("Login Response Message", String.valueOf(urlConnection.getResponseMessage()));
        Log.v("Login Returned String", result.toString());


        jsonObject = new JSONObject(result.toString());
        token = jsonObject.getString("access_token");

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        urlConnection.disconnect();
        if (token != null) {
            jsonObject = driverInfo(token);

        }
    }

这很有效,虽然我现在把它移到了它自己的功能上。 将输入类型更改为HashMap