pessoal qual é a alternativa para fazer http post request a partir do sdk 23? estou tentando usar o http client mas esta dando erro no response. Alguem pode me ajudar?
Use a classe HttpUrlConnection
:
try {
URL url = new URL("http://www.minha.url.com.br/");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//coloca informação no corpo do POST
connection.setDoOutput(true);
PrintStream printStream = new PrintStream(connection.getOutputStream());
printStream.println(informacao);
//envia para o servidor
connection.connect();
//trata resposta...
String resposta = new Scanner(connection.getInputStream()).next();
} catch (Exception e) {
throw new RuntimeException(e);
}
Hey Felipe, vlw pela resposta.
Desde que criei esse tópico venho pesquisando sobre como resolveria meu problema, ja tinha encontrado essa forma, e testando de varias formas o que não consigo é enviar parametros para a url.
Estou criando um app para fazer login num site e após o login ser realizado, acessar uma pagina do site.
meu código antigo era esse
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import static java.net.Proxy.Type.HTTP;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Consts;
import static org.apache.http.Consts.UTF_8;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class Conexao {
private final DefaultHttpClient client = new DefaultHttpClient();
public boolean login(final String url, final String user, final String password) throws UnsupportedEncodingException, IOException { final HttpPost post = new HttpPost(url); boolean result = false; final List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("codigoCidade", "SP")); nameValuePairs.add(new BasicNameValuePair("usuario", user)); nameValuePairs.add(new BasicNameValuePair("senha", password)); nameValuePairs.add(new BasicNameValuePair("formLogin", "Entrar")); nameValuePairs.add(new BasicNameValuePair("next", "")); post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); post.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0"); HttpResponse response = client.execute(post); EntityUtils.consume(response.getEntity()); final HttpGet get = new HttpGet("url da pagina que quero entrar quando estiver autenticado"); response = client.execute(get); if(checkSuccess(response)) { result = true; } else { } return result; }
public String openPage(final String url) throws IOException { final HttpGet get = new HttpGet(url); final HttpResponse response = client.execute(get); String aux = saveHTLM(response); return aux; }
public void close() { client.getConnectionManager().shutdown(); }
private boolean checkSuccess(final HttpResponse response) throws IOException { final BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); String line; boolean found = false; while ((line = rd.readLine()) != null) { if (line.contains("<title>Login</title>")) { found = true; } } return !found; }
private String saveHTLM(final HttpResponse response) throws IOException { final BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuilder cod = new StringBuilder(); String line; String aux; while ((line = rd.readLine()) != null) { if (line.equals(",") || line.equals(" ")) { } else { cod.append(line); cod.append(""); } } aux = cod.toString(); return aux; }
public String main(String pront, String senha) throws IOException { Conexao navegador = new Conexao(); String codpag = ""; try { boolean ok = navegador.login("url da pagina de login", pront, senha); if (ok) { codpag = navegador.openPage("url da pagina que quero acessar quando autenticado"); } navegador.close(); } catch (UnsupportedEncodingException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } return codpag; }
}
o problema é que não consigo enviar os parametros dessa forma
final List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("codigoCidade", "SP")); nameValuePairs.add(new BasicNameValuePair("usuario", user)); nameValuePairs.add(new BasicNameValuePair("senha", password)); nameValuePairs.add(new BasicNameValuePair("formLogin", "Entrar")); nameValuePairs.add(new BasicNameValuePair("next", "")); post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
pelo que entendi eles estão indo como se fosse um complemento da url
vlw
Perceba que para você colocar algo no corpo do POST, basta escrever com println
. Onde coloquei informacao
você pode criar uma String
com o que você quer colocar lá. Um JSON seria interessante, mais ou menos assim:
info {
codigoCidade: "SP",
usuario: "...",
senha: "senhaCriptografadaPeloAmorDeDeus",
...
}
Dá uma olhada em uma biblioteca chamada OkHttp (http://square.github.io/okhttp/) ela é muito simples de usar e intuitiva