我正在尝试通过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生成请求的方式,但我还没有找到另一种方法来实现它。
提前致谢。
答案 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.x
和httpcore-4.x
个jar文件
答案 1 :(得分:0)
好的,我已经解决了。我发送请求的方式还可以,服务还可以,但我使用Eclipse Luna在调试模式下运行JBoss,这就是让它挂在那里。所以我在运行模式下运行它,它运行得很好。因此,如果其他人面对它,请在运行模式下运行并尝试。 谢谢你的帮助。