Z powodzeniem używam tego kodu do wysyłania HTTP
żądań z pewnymi parametrami za pomocą GET
metody
void sendRequest(String request)
{
// i.e.: request = "http://example.com/index.php?param1=a¶m2=b¶m3=c";
URL url = new URL(request);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("GET");
connection.setRequestProperty("Content-Type", "text/plain");
connection.setRequestProperty("charset", "utf-8");
connection.connect();
}
Teraz może być konieczne przesłanie parametrów (tj. Param1, param2, param3) POST
metodą, ponieważ są one bardzo długie. Myślałem o dodaniu dodatkowego parametru do tej metody (tj. String httpMethod).
Jak mogę jak najmniej zmienić powyższy kod, aby móc przesyłać parametry za pośrednictwem GET
lub POST
?
Miałem nadzieję, że to się zmieni
connection.setRequestMethod("GET");
do
connection.setRequestMethod("POST");
zrobiłby lewę, ale parametry są nadal wysyłane metodą GET.
Ma HttpURLConnection
jakaś metoda, która by pomogła? Czy jest jakiś pomocny konstrukt Java?
Każda pomoc byłaby bardzo mile widziana.
http://example.com/index.php
)Odpowiedzi:
W żądaniu GET parametry są wysyłane jako część adresu URL.
W żądaniu POST parametry są wysyłane jako treść żądania, po nagłówkach.
Aby wykonać test POST za pomocą HttpURLConnection, musisz zapisać parametry do połączenia po jego otwarciu.
Ten kod powinien zacząć:
źródło
byte[] data = urlParameters.getBytes(Charset.forName("UTF-8"))
:).conn.getResponseCode()
czyconn.getInputStream()
inaczej nie wyśle żadnych danych.Oto prosty przykład, który przesyła formularz, a następnie zrzuca stronę wyników
System.out
. Zmień odpowiednio adres URL i parametry POST, oczywiście:Jeśli chcesz otrzymać wynik
String
zamiast bezpośrednio wydrukować:źródło
UTF-8
, co nie zawsze jest prawdą. Aby pobrać zestaw znaków, należy pobrać nagłówekContent-Type
i parsować zestaw znaków. Kiedy ten nagłówek nie jest dostępny, należy użyć standardowego http:ISO-8859-1
.<meta charset="...">
lub<meta http-equiv="Content-Type" content="...">
nagłówek lub dokument, który należy przeanalizować.response += line;
jest fenomenalnie wolny i zjada przerwy w linii. Do odpowiedzi dodałem przykład otrzymania odpowiedzi łańcuchowej.Nie mogłem przekonać przykładu Alana do zrobienia tego postu, więc skończyłem z tym:
źródło
HttpURLConnection
Używanie jest dla mnie bardzo kłopotliwe. I musisz napisać dużo bojlera, podatnego na błędy kodu. Potrzebowałem lekkiego opakowania dla moich projektów na Androida i wyszedłem z biblioteką, której możesz także użyć: DavidWebb .Powyższy przykład można zapisać w następujący sposób:
Listę alternatywnych bibliotek można znaleźć pod podanym linkiem.
źródło
Przeczytałem powyższe odpowiedzi i utworzyłem klasę narzędzi w celu uproszczenia żądania HTTP. mam nadzieję, że ci to pomoże.
Wywołanie metody
Klasa użyteczności
źródło
Widzę, że niektóre inne odpowiedzi dały alternatywę, osobiście uważam, że intuicyjnie postępujesz właściwie;). Przepraszamy, na devoxx, gdzie kilku mówców wypowiada się na ten temat.
Właśnie dlatego osobiście korzystam z bibliotek HTTP Apache HTTPClient / HttpCore do tego rodzaju pracy. Uważam, że ich interfejs API jest łatwiejszy w użyciu niż natywna obsługa HTTP w Javie. YMMV oczywiście!
źródło
źródło
import java.net.*;
!Miałem ten sam problem. Chciałem wysłać dane przez POST. Użyłem następującego kodu:
Użyłem Jsoup do analizy:
źródło
Metoda GET i POST ustawiona w ten sposób ... Dwa typy wywoływania interfejsu API 1) get () i 2) post (). Metoda get (), aby uzyskać wartość z tablicy api json, aby uzyskać metodę value & post () w naszym poście danych w adresie URL i uzyskać odpowiedź.
źródło
Wypróbuj ten wzór:
źródło
Ta odpowiedź dotyczy konkretnego przypadku wywołania POST przy użyciu niestandardowego Java POJO.
Wykorzystanie zależności maven dla Gson do serializacji naszego obiektu Java do JSON.
Zainstaluj Gson, korzystając z zależności poniżej.
Dla osób korzystających z gradle można skorzystać z poniższych
Inne zastosowane przywozy:
Teraz możemy zacząć korzystać z HttpPost dostarczonego przez Apache
Powyższy kod zwróci kod odpowiedzi otrzymany z wywołania POST
źródło
tutaj wysłałem jsonobject jako parametr // jsonobject = {"name": "lucifer", "pass": "abc"} // serverUrl = " http://192.168.100.12/testing " //host=192.168.100.12
źródło
Gorąco polecam żądanie HTTP oparte na apache http api.
W twoim przypadku możesz zobaczyć przykład:
Jeśli nie jesteś zainteresowany odpowiedzią
Ogólne żądanie wysyłania za pomocą żądania HTTP : Przeczytaj dokumentację i zobacz moje odpowiedzi Żądanie HTTP POST z JSON String w JAVA , Wysyłanie żądania HTTP POST W Javie , HTTP POST za pomocą JSON w Javie
źródło
Witaj proszę, skorzystaj z tej klasy, aby ulepszyć twoją metodę postów
źródło
Wziąłem odpowiedź Boanna i wykorzystałem ją do stworzenia bardziej elastycznego narzędzia do tworzenia ciągów zapytań, które obsługuje listy i tablice, podobnie jak metoda http_build_query php:
źródło
Dla tych, którzy mają problemy z otrzymaniem żądania na stronie php przy użyciu $ _POST, ponieważ oczekujesz par klucz-wartość:
Podczas gdy wszystkie odpowiedzi były bardzo pomocne, brakowało mi podstawowego zrozumienia, na którym ciągu napisać, ponieważ w starym apache HttpClient użyłem
a następnie może użyć $ _POST w php, aby uzyskać pary klucz-wartość.
O ile mi wiadomo, przed wysłaniem należy ręcznie zbudować ten ciąg. Więc ciąg musi wyglądać
ale zamiast tego wystarczy dodać go do adresu URL, który jest opublikowany (w nagłówku).
Alternatywą byłoby użycie zamiast tego łańcucha json:
i ściągnij go w php bez $ _POST:
Oto przykładowy kod w Kotlin:
źródło
Wygląda na to, że musisz zadzwonić
connection.getOutputStream()
„co najmniej raz” (a takżesetDoOutput(true)
), aby potraktować to jako POST.Zatem minimalny wymagany kod to:
Co zaskakujące, możesz nawet użyć parametrów stylu „GET” w urlString. Choć może to dezorientować.
Najwyraźniej możesz również użyć NameValuePair .
źródło