Tengo que hacer una solicitud posterior a un servicio web para autenticar al usuario con nombre de usuario y contraseña.JAVA: http post request
que tienen un problema con petición siguiente mensaje:
public String postTest(String action, ConnectionParametrData [] parameters) {
Uri.Builder builder = new Uri.Builder().scheme(scheme).authority(authority).path(action);
uri = builder.build();
BufferedReader in = null;
String ans = null;
HttpPost request = new HttpPost(uri.toString());
HttpClient defaultClient = new DefaultHttpClient();
try {
request.setHeader("Content-Type", "application/x-www-form-urlencoded");
request.setEntity(new UrlEncodedFormEntity(getValuePairs(parameters)));
HttpResponse response = defaultClient.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"), 8192);
StringBuffer sb = new StringBuffer("");
String line = "";
String newLine = System.getProperty("line.separator");
while((line = in.readLine()) != null) {
sb.append(line + newLine);
}
ans = sb.toString();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ans;
}
Cuando ejecuté este servidor método tiros de error diciendo que la solicitud no es una solicitud posterior.
Pero este método funcione a la perfección:
private String makePost(String action, ConnectionParametrData [] parameters) throws IOException {
StringBuilder urlBuild = new StringBuilder();
urlBuild.append(scheme).append("://www.").append(authority).append(action);
URL url = new URL(urlBuild.toString());
URLConnection urlConnection = url.openConnection();
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.setUseCaches(false);
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
DataOutputStream printout = new DataOutputStream(urlConnection.getOutputStream());
String content = getParameters(parameters);
printout.writeBytes(content);
printout.flush();
printout.close();
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()), 8192);
StringBuffer sb = new StringBuffer("");
String line = "";
String newLine = System.getProperty("line.separator");
while((line = in.readLine()) != null) {
sb.append(line + newLine);
}
in.close();
return sb.toString();
}
Yo prefiero usar HttpClient que URLConecction, ¿Alguien sabe por qué primer método no está aprobado como Post?
"throws Error" - en forma de una excepción? ¿Has inspeccionado lo que realmente pasa en la línea (WireShark)? – Fildor
@wilek ¿Se puede imprimir el URI.toString() y publicarlo? –