首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpURLConnection -响应代码: 400 (坏请求) Android -> xserve

HttpURLConnection -响应代码: 400 (坏请求) Android -> xserve
EN

Stack Overflow用户
提问于 2017-03-22 17:36:34
回答 1查看 3K关注 0票数 0

因此,我正试图通过Xserve连接到我们的数据库,此时我正试图为用户访问令牌。我使用正确的用户名和密码以及上下文类型和授予类型;我知道这一点,因为我通过googles postmaster扩展尝试了相同的POST方法。无论出于什么原因,当我在Android上尝试相同的东西时,至少我认为是一样的,它给了我400个响应代码,并且没有返回任何东西。

下面是用于连接的代码:

代码语言:javascript
复制
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“实现某种类型的输出。

有什么特别之处吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-28 08:14:41

代码语言:javascript
复制
 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42958906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档