Zaktualizowana odpowiedź:
Ponieważ niektóre klasy w oryginalnej odpowiedzi są przestarzałe w nowszej wersji komponentów HTTP Apache, publikuję tę aktualizację.
Nawiasem mówiąc, możesz uzyskać dostęp do pełnej dokumentacji, aby uzyskać więcej przykładów tutaj .
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
}
}
Oryginalna odpowiedź:
Polecam używać Apache HttpClient. jest szybszy i łatwiejszy do wdrożenia.
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.
Aby uzyskać więcej informacji, sprawdź ten adres URL: http://hc.apache.org/
PostMethod
wydaje się, że jest teraz wywoływanyHttpPost
zgodnie z stackoverflow.com/a/9242394/1338936 - tylko dla każdego, kto znalazł tę odpowiedź tak jak ja :)Wysyłanie żądania POST jest łatwe w waniliowej Javie. Zaczynając od
URL
, musimy przekonwertować go naURLConnection
useurl.openConnection();
. Następnie musimy rzucić go na aHttpURLConnection
, abyśmy mogli uzyskać dostęp do jegosetRequestMethod()
metody i ustawić naszą metodę. W końcu mówimy, że będziemy wysyłać dane przez połączenie.Następnie musimy określić, co zamierzamy wysłać:
Wysyłanie prostego formularza
Normalny test POST pochodzący z formularza http ma dobrze zdefiniowany format. Musimy przekonwertować nasze dane wejściowe na ten format:
Następnie możemy dołączyć treść formularza do żądania http z odpowiednimi nagłówkami i wysłać go.
Wysyłanie JSON
Możemy również wysłać Json za pomocą java, jest to również łatwe:
Pamiętaj, że różne serwery akceptują różne typy zawartości dla json, zobacz to pytanie.
Wysyłanie plików z postem Java
Wysyłanie plików można uznać za trudniejsze w obsłudze, ponieważ format jest bardziej złożony. Dodamy również obsługę wysyłania plików w postaci ciągu, ponieważ nie chcemy buforować pliku w całości do pamięci.
W tym celu definiujemy niektóre metody pomocnicze:
Następnie możemy użyć tych metod, aby utworzyć wieloczęściowe żądanie postu w następujący sposób:
źródło
out.write(finishBoundaryBytes);
linia potrzebuje?http.connect();
wykona wysyłanie POST, prawda?requests.post('http://httpbin.org/post', data = {'key':'value'})
w Pythonie… Jestem nowy w Javie, więc jest to dla mnie bardzo dziwne użycie słowa „łatwe” :)źródło
encode(String)
jest przestarzałe. Musisz użyćencode(String, String)
, który określa typ kodowania. Przykład:encode(rawData, "UTF-8")
.Pierwsza odpowiedź była świetna, ale musiałem dodać try / catch, aby uniknąć błędów kompilatora Java.
Miałem też problemy z ustaleniem, jak czytać
HttpResponse
biblioteki Java.Oto bardziej kompletny kod:
źródło
e.printStackTrace()
niczego nie obsługuje.Prostym sposobem korzystania ze składników HTTP Apache jest
Spójrz na Fluent API
źródło
najprostszy sposób na przesłanie parametrów za pomocą żądania postu:
Uczyniłeś. teraz możesz użyć
responsePOST
. Uzyskaj treść odpowiedzi jako ciąg:źródło
Wywołanie
HttpURLConnection.setRequestMethod("POST")
iHttpURLConnection.setDoOutput(true);
właściwie tylko to drugie jest potrzebne, ponieważ POST staje się wówczas metodą domyślną.źródło
Polecam użycie żądania http zbudowanego na apache http api.
źródło