Como faço para adicionar parâmetros de consulta a um GetMethod (usando commons-httpclient Java)?

StackOverflow https://stackoverflow.com/questions/217070

  •  03-07-2019
  •  | 
  •  

Pergunta

Usando do Apache commons-httpclient para Java, qual é a melhor maneira de adicionar parâmetros de consulta a uma instância GetMethod? Se eu estou usando PostMethod, é muito simples:

PostMethod method = new PostMethod();
method.addParameter("key", "value");

GetMethod não tem um método "addParameter", no entanto. Eu descobri que isso funciona:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString(new NameValuePair[] {
    new NameValuePair("key", "value")
});

No entanto, a maioria dos exemplos que eu vi qualquer codificar os parâmetros diretamente na URL, por exemplo:.

GetMethod method = new GetMethod("http://www.example.com/page?key=value");

ou codificar a string de consulta, por exemplo:.

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString("?key=value");

é um desses padrões para ser preferido? E por que a discrepância entre API PostMethod e GetMethod? E o que são todos aqueles outros HttpMethodParams métodos destinados a ser utilizados para?

Foi útil?

Solução

Métodos Pós ter parâmetros post, mas get métodos não .

Os parâmetros de consulta são incorporadas no URL. A versão atual do HttpClient aceita uma string no construtor. Se você quiser adicionar a chave, valor par acima, você poderia usar:

String url = "http://www.example.com/page?key=value";
GetMethod method = new GetMethod(url);

Um bom tutorial de partida pode ser encontrado na página Apache Jakarta Commons .

Atualizar :. Como sugerido no comentário, NameValuePair funciona

GetMethod method = new GetMethod("example.com/page"); 
method.setQueryString(new NameValuePair[] { 
    new NameValuePair("key", "value") 
}); 

Outras dicas

Não é apenas uma questão de preferência pessoal. A questão pertinente aqui é URL-codificar os seus valores de parâmetros, de modo que os valores não vai ficar corrompido ou mal interpretado como delimitadores extras, etc.

Como sempre, é melhor ler a documentação da API em detalhes: HttpClient API Documentação

Lendo isso, você pode ver que setQueryString(String) vai NÃO URL-codificar ou delimitar os parâmetros e valores, enquanto setQueryString(NameValuePair[]) automaticamente URL-codificar e delimitar seus nomes e valores de parâmetros. Este é o melhor método sempre que você estiver usando dados dinâmicos, porque pode conter ampersands, sinais de igual etc.

Tente desta forma:

    URIBuilder builder = new URIBuilder("https://graph.facebook.com/oauth/access_token")
            .addParameter("client_id", application.getKey())
            .addParameter("client_secret", application.getSecret())
            .addParameter("redirect_uri", callbackURL)
            .addParameter("code", code);

    HttpPost method = new HttpPost(builder.build());
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top