通过 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.x
和 httpcore-4.x
个 jar 文件
好的,我已经解决了。我发送请求的方式没有问题,服务也没有问题,但是我在调试模式下使用 Eclipse Luna 运行ning JBoss,这让它挂在那里。所以我 运行 在 运行 模式下使用它,它运行得很好。所以如果其他人面对它,运行 在 运行 模式下尝试。
感谢您的帮助。
我正在尝试通过 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.x
和 httpcore-4.x
个 jar 文件
好的,我已经解决了。我发送请求的方式没有问题,服务也没有问题,但是我在调试模式下使用 Eclipse Luna 运行ning JBoss,这让它挂在那里。所以我 运行 在 运行 模式下使用它,它运行得很好。所以如果其他人面对它,运行 在 运行 模式下尝试。 感谢您的帮助。