通过 java 发送带有表单参数的 POST 请求没有得到响应

Sending POST request with Form params through java don´t get response

我正在尝试通过 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 生成请求的方式上,但我还没有找到其他方法。

提前致谢。

使用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 文件

好的,我已经解决了。我发送请求的方式没有问题,服务也没有问题,但是我在调​​试模式下使用 Eclipse Luna 运行ning JBoss,这让它挂在那里。所以我 运行 在 运行 模式下使用它,它运行得很好。所以如果其他人面对它,运行 在 运行 模式下尝试。 感谢您的帮助。