【问题标题】:HttpPost escaped parameterHttpPost 转义参数
【发布时间】:2012-10-15 20:18:41
【问题描述】:

我正在尝试使用 HttpClient(HttpComponents) 创建一个 HttpPost。这是我的代码:

try{
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost post = new HttpPost(
                "https://accounts.google.com/o/oauth2/token");
            post.addHeader("accept", "application/json");
            post.addHeader("Content-Type", "application/json");

            List<NameValuePair> nvps = new ArrayList<NameValuePair>();
            nvps.add(new BasicNameValuePair("code", new String(code.getBytes(), Charset.forName("UTF-8"))));
            nvps.add(new BasicNameValuePair("client_id", "googleClientId"));
            nvps.add(new BasicNameValuePair("redirect_uri", "http://localhost:8080/myapp/test"));
            nvps.add(new BasicNameValuePair("client_secret", "ClientSecret"));
            nvps.add(new BasicNameValuePair("grant_type", "authorization_code"));
            post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));


            HttpResponse resp = httpClient.execute(post);

            if (resp.getStatusLine().getStatusCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                   + resp.getStatusLine().getStatusCode());
            }

            BufferedReader br = new BufferedReader(
                             new InputStreamReader((resp.getEntity().getContent())));

            String output;
            System.out.println("Output from Server .... \n");
            while ((output = br.readLine()) != null) {
                System.out.println(output);
                res = res + output;
            }
            System.out.println(output);
            httpClient.getConnectionManager().shutdown();
            } catch(Exception e){
                e.printStackTrace();
            }
            System.out.println(res);

我得到一个400 代码。我怀疑这是因为我设置的所有参数都包含特殊字符,例如 _ . and / 并且它们被转义了。我怎样才能避免这种情况?还是我错过了真正的问题?

【问题讨论】:

  • @Nambari 这是帖子,所以我与网址无关。
  • @Nambari 我错过了什么?我是否以某种方式在 URL 中发送参数?
  • 看来你是。您能否一一添加并缩小可能导致问题的参数/。
  • @Nambari 显然我错了。这是redirect_uri。你有使用 OAuth2 的经验吗?

标签: java post httpclient


【解决方案1】:

http 标头“Content-Type”是否应该为 application/x-www-form-urlencoded,因为您明确地对 post 参数进行 URL 编码?

【讨论】:

  • 我是否对 URL 中的参数进行了编码???它们不是在 Post 正文中传输的吗?
  • 如果是这样,如何传递请求体中的参数?
  • 我终于解决了。这只是问题的一部分,其余的根据这里的答案解决了:stackoverflow.com/questions/11485271/…谢谢!
  • 不客气。如果您认为它对您有任何帮助,请投票支持我的回答。谢谢。
  • 我也会接受这个答案,因为它解决了部分问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 2011-12-28
相关资源
最近更新 更多