HttpClient no sdk 23

4 respostas
V

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?

4 Respostas

F

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);
}
V

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

F

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",
    ...
}
C

Dá uma olhada em uma biblioteca chamada OkHttp (http://square.github.io/okhttp/) ela é muito simples de usar e intuitiva

Criado 30 de janeiro de 2016
Ultima resposta 16 de fev. de 2016
Respostas 4
Participantes 3