通过java发送带有Form params的POST请求不会得到响应

时间:2015-07-15 18:33:08

标签: java rest httprequest

我正在尝试通过Java向REST Web服务发送请求。

我需要向Web服务发送一些表单参数,因为它们太大而无法通过queryParams发送。

发送的httpRequest方法如下:

public static String sendPostWithParams(String urlParam, Map<String, Object> params) throws Exception {
    URL url = new URL(urlParam);

    StringBuilder postData = new StringBuilder();
    for (Map.Entry<String, Object> param : params.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"));
    }
    byte[] postDataBytes = postData.toString().getBytes("UTF-8");

    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
    conn.setDoOutput(true);
    conn.getOutputStream().write(postDataBytes);
    conn.connect(); 

    DataOutputStream wr = new DataOutputStream(conn.getOutputStream());

    wr.flush();
    wr.close();

    int responseCode = conn.getResponseCode();
    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));

    // print result
    return response.toString();
}

我试图通过Postman发送请求,它工作正常,就像预期的那样。但是当我尝试通过Java发送请求时,我在控制台中打印了以下两行,然后它就会冻结,直到超时为止。

15:18:18,160 INFORMACIÓN [org.jboss.resteasy.cdi.CdiInjectorFactory] (http--0.0.0.0-8080-1) Found BeanManager at java:comp/BeanManager
15:18:18,170 INFORMACIÓN [org.jboss.resteasy.spi.ResteasyDeployment] (http--0.0.0.0-8080-1) Deploying javax.ws.rs.core.Application: class .com.services.rest.ApplicationConfig$Proxy$_$$_WeldClientProxy

没有调用Web服务,因为我在那里有一个断点,它永远不会到达它。

所以我认为问题可能在于我通过Java生成请求的方式,但我还没有找到另一种方法来实现它。

提前致谢。

2 个答案:

答案 0 :(得分:0)

使用HttpClient

            HttpClient client = new DefaultHttpClient();

            HttpPost request = new HttpPost("your url");                

            //Set Headers
            request.setHeader("Accept", "application/json");
            request.setHeader("Content-Type", "application/x-www-form-urlencoded");
            //Add Parameters
            List<NameValuePair> params = new ArrayList<>();
            params.add(new BasicNameValuePair("login", "kainix"));
            params.add(new BasicNameValuePair("pass", "google@123"));
            request.setEntity(new UrlEncodedFormEntity(params));


            //Sends Request                
            HttpResponse response = client.execute(request);  

            //Read From Response
            StringBuilder result = new StringBuilder();
            BufferedReader reader;
            InputStream inputStream = response.getEntity().getContent();
            reader = new BufferedReader(new InputStreamReader(inputStream));
            String inputLine;
            while ((inputLine = reader.readLine()) != null) {
                result.append(inputLine);
            }

            System.out.println(result);

尝试这个简单明了,你需要httpclient-4.xhttpcore-4.x个jar文件

答案 1 :(得分:0)

好的,我已经解决了。我发送请求的方式还可以,服务还可以,但我使用Eclipse Luna在调试模式下运行JBoss,这就是让它挂在那里。所以我在运行模式下运行它,它运行得很好。因此,如果其他人面对它,请在运行模式下运行并尝试。 谢谢你的帮助。