Resposta atualizada:
Como algumas classes, na resposta original, foram descontinuadas na versão mais recente do Apache HTTP Components, estou postando esta atualização.
A propósito, você pode acessar a documentação completa para mais exemplos aqui .
HttpClient httpclient = HttpClients.createDefault();
HttpPost httppost = new HttpPost("http://www.a-domain.com/foo/");
// Request parameters and other properties.
List<NameValuePair> params = new ArrayList<NameValuePair>(2);
params.add(new BasicNameValuePair("param-1", "12345"));
params.add(new BasicNameValuePair("param-2", "Hello!"));
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
//Execute and get the response.
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if (entity != null) {
try (InputStream instream = entity.getContent()) {
// do something useful
}
}
Resposta original:
Eu recomendo usar o Apache HttpClient. é mais rápido e fácil de implementar.
HttpPost post = new HttpPost("http://jakarata.apache.org/");
NameValuePair[] data = {
new NameValuePair("user", "joe"),
new NameValuePair("password", "bloggs")
};
post.setRequestBody(data);
// execute method and handle any error responses.
...
InputStream in = post.getResponseBodyAsStream();
// handle response.
para obter mais informações, consulte este URL: http://hc.apache.org/
PostMethod
que parece a sua realidade agora chamadoHttpPost
como por stackoverflow.com/a/9242394/1338936 - apenas para quem encontrar esta resposta como eu fiz :)O envio de uma solicitação POST é fácil em Java vanilla. Começando com a
URL
, não precisamos convertê-lo em umURLConnection
usourl.openConnection();
. Depois disso, precisamos convertê-lo para aHttpURLConnection
, para que possamos acessar seusetRequestMethod()
método para defini-lo. Finalmente dizemos que vamos enviar dados pela conexão.Em seguida, precisamos declarar o que vamos enviar:
Enviando um formulário simples
Um POST normal proveniente de um formulário http tem um formato bem definido . Precisamos converter nossa entrada para este formato:
Podemos então anexar o conteúdo do nosso formulário à solicitação http com cabeçalhos adequados e enviá-la.
Enviando JSON
Também podemos enviar json usando java, isso também é fácil:
Lembre-se de que servidores diferentes aceitam tipos de conteúdo diferentes para o json, consulte esta pergunta.
Enviando arquivos com publicação Java
O envio de arquivos pode ser considerado mais desafiador, pois o formato é mais complexo. Também vamos adicionar suporte para enviar os arquivos como uma string, pois não queremos armazenar o arquivo na memória.
Para isso, definimos alguns métodos auxiliares:
Em seguida, podemos usar esses métodos para criar uma solicitação de postagem com várias partes da seguinte maneira:
fonte
out.write(finishBoundaryBytes);
linha precisa?http.connect();
fará o envio do POST, não é?requests.post('http://httpbin.org/post', data = {'key':'value'})
em Python ... Eu sou novo para Java de modo que este é um uso muito estranho da palavra “fácil” para me :)fonte
encode(String)
está obsoleto. Você precisa usarencode(String, String)
, o que especifica o tipo de codificação. Exemplo:encode(rawData, "UTF-8")
.A primeira resposta foi ótima, mas tive que adicionar try / catch para evitar erros do compilador Java.
Além disso, tive problemas para descobrir como ler as
HttpResponse
bibliotecas Java.Aqui está o código mais completo:
fonte
e.printStackTrace()
não lida com nada.Uma maneira simples de usar o Apache HTTP Components é
Dê uma olhada na API Fluent
fonte
maneira mais simples de enviar parâmetros com a solicitação de postagem:
Você fez. agora você pode usar
responsePOST
. Obtenha conteúdo de resposta como sequência:fonte
Chamada
HttpURLConnection.setRequestMethod("POST")
eHttpURLConnection.setDoOutput(true);
Na verdade, apenas o último é necessário, pois o POST se torna o método padrão.fonte
Eu recomendo usar o http-request construído no apache http api.
fonte