Tartalomjegyzék
Java HttpURLConnection használata HTTP GET és POST kérésekhez
A Java programozás során gyakran van szükség külső webes erőforrásokhoz való hozzáférésre HTTP protokollon keresztül. Ehhez a Java kínálja az HttpURLConnection
osztályt, amely lehetővé teszi a HTTP GET és POST kérések küldését, valamint a válaszok fogadását.
Ebben a cikkben lépésről lépésre bemutatjuk, hogyan lehet az HttpURLConnection
osztályt használni HTTP GET és POST kérésekhez Java programokban.
Bevezetés
Az HttpURLConnection
egy Java osztály, amely a java.net
csomag része. Ez az osztály lehetővé teszi a HTTP protokollon keresztül történő hálózati kommunikációt. Az HttpURLConnection
objektuma képviseli egy HTTP kapcsolatot egy adott URL-hez. Az objektum létrehozása után a kapcsolatot nyithatjuk, beállíthatjuk a kérés fejléceit, elküldhetjük a kérést, és fogadhatjuk a választ.
Az HttpURLConnection
osztály használatának fő előnyei:
* Könnyen kezelhető: Az osztály viszonylag egyszerűen használható, és a Java programozók számára könnyen megérthető.
* Sokoldalú: Az osztály támogatja mind a HTTP GET, mind a POST kéréseket, valamint a különféle HTTP fejlécek beállítását.
* Rugalmas: A válaszok feldolgozása az igényeknek megfelelően történik, a válasz adatfolyam olvasása vagy a válasz kódjának ellenőrzése.
Ebben a cikkben megvizsgáljuk a GET és POST kérések küldésének lépéseit az HttpURLConnection
osztály segítségével, beleértve a fejlécek beállítását, a kérelem testének megadását, a válasz kódjának ellenőrzését és a válasz tartalmának olvasását.
HTTP GET kérések küldése
A HTTP GET kérés egy olyan kérés, amely információkat kér egy adott URL-ről. A kérés nem tartalmazza a kérelem testét, és a kérés paraméterei az URL-be vannak ágyazva.
Az alábbiakban látható egy példa a GET kérés küldésére az HttpURLConnection
osztály használatával:
java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class HttpGetExample {
public static void main(String[] args) throws Exception {
// A lekérdezendő URL
String url = "https://www.example.com/api/users";
// URL objektum létrehozása
URL obj = new URL(url);
// HttpURLConnection objektum létrehozása
URLConnection con = obj.openConnection();
// Beállítás HttpURLConnection objektumként
HttpURLConnection httpCon = (HttpURLConnection) con;
// Kérés beállítása GET-re
httpCon.setRequestMethod("GET");
// Válasz kódjának ellenőrzése
int responseCode = httpCon.getResponseCode();
// Ha a válasz kódja 200 (OK), akkor olvashatjuk a választ
if (responseCode == HttpURLConnection.HTTP_OK) {
// Válasz olvasása
BufferedReader in = new BufferedReader(
new InputStreamReader(httpCon.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Válasz kiírása a konzolra
System.out.println(response.toString());
} else {
System.out.println("Válaszkód: " + responseCode);
}
}
}
Ebben a példában először létrehozunk egy URL
objektumot a lekérdezendő URL-címmel. Ezután létrehozunk egy HttpURLConnection
objektumot a openConnection()
metódussal. A kérés beállítása GET
-re a setRequestMethod()
metódussal történik. Ezután a getResponseCode()
metódussal ellenőrizzük a válasz kódját. Ha a válasz kódja 200 (OK), akkor olvashatjuk a választ az getInputStream()
metódussal. A válasz tartalmát egy BufferedReader
objektum segítségével olvassuk soronként, és a válasz szöveges formátumban jelenik meg a konzolon.
HTTP POST kérések küldése
A HTTP POST kérés egy olyan kérés, amely adatot küld egy adott URL-re. A kérés tartalmazza a kérelem testét, amely a küldendő adatot tartalmazza.
A POST kérés küldésének folyamata hasonló a GET kéréshez, de néhány fontos különbség van:
* A setRequestMethod()
metódusban POST
értéket kell megadni.
* A kérelem testét a setDoOutput(true)
metódussal kell engedélyezni.
* A kérelem testét egy OutputStream
objektum segítségével kell írni az getOutputStream()
metódussal.
Az alábbiakban látható egy példa a POST kérés küldésére az HttpURLConnection
osztály használatával:
java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
public class HttpPostExample {
public static void main(String[] args) throws Exception {
// A lekérdezendő URL
String url = "https://www.example.com/api/users";
// A küldendő adatok
String data = "name=John&surname=Doe";
// URL objektum létrehozása
URL obj = new URL(url);
// HttpURLConnection objektum létrehozása
URLConnection con = obj.openConnection();
// Beállítás HttpURLConnection objektumként
HttpURLConnection httpCon = (HttpURLConnection) con;
// Kérés beállítása POST-ra
httpCon.setRequestMethod("POST");
// Kérelem testének engedélyezése
httpCon.setDoOutput(true);
// Kérelem testének beállítása
OutputStream os = httpCon.getOutputStream();
os.write(data.getBytes());
os.flush();
os.close();
// Válasz kódjának ellenőrzése
int responseCode = httpCon.getResponseCode();
// Ha a válasz kódja 200 (OK), akkor olvashatjuk a választ
if (responseCode == HttpURLConnection.HTTP_OK) {
// Válasz olvasása
BufferedReader in = new BufferedReader(
new InputStreamReader(httpCon.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Válasz kiírása a konzolra
System.out.println(response.toString());
} else {
System.out.println("Válaszkód: " + responseCode);
}
}
}
Ebben a példában a data
változóban tároljuk a küldendő adatokat. A kérés testének engedélyezése a setDoOutput(true)
metódussal történik. A kérelem testét az getOutputStream()
metódussal kapott OutputStream
objektum segítségével írjuk. A válasz kódjának ellenőrzése és a válasz olvasása ugyanúgy történik, mint a GET kérésnél.
Fejlécek beállítása
Az HttpURLConnection
osztály lehetővé teszi a különféle HTTP fejlécek beállítását. A fejlécek a kéréssel és a válaszsal kapcsolatos további információkat hordoznak.
A fejlécek beállításához a setRequestProperty()
metódust használjuk. Például a Content-Type
fejléc beállításához a következő kódot használhatjuk:
java
httpCon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
További beállítások
Az HttpURLConnection
osztály számos további beállítást kínál a kapcsolat testreszabásához. Például a setConnectTimeout()
metódussal beállíthatjuk a kapcsolat létrehozására várt maximális időt, a setReadTimeout()
metódussal pedig a válasz olvasására várt maximális időt.
Következtetés
Az HttpURLConnection
osztály egy erőteljes eszköz a HTTP kérések küldéséhez Java programokból. A cikkben bemutattuk az alapvető lépéseket a GET és POST kérések küldéséhez, beleértve a fejlécek beállítását és a válaszok olvasását. Az HttpURLConnection
osztály sokoldalú, és számos további beállítást kínál, amelyek segítenek a kapcsolat testreszabásában.
Az HttpURLConnection
osztály használata lehetővé teszi a Java programozók számára, hogy könnyedén kommunikáljanak külső webes erőforrásokkal, és így bővítik a programok funkcionalitását.
Gyakori kérdések
1. Mi a különbség a GET és a POST kérés között?
A GET kérés információkat kér egy adott URL-ről, míg a POST kérés adatot küld egy adott URL-re. A GET kérés nem tartalmazza a kérelem testét, míg a POST kérés tartalmazza a küldendő adatot.
2. Hogyan állíthatom be a kérés időtúllépését?
A kérés időtúllépését a setConnectTimeout()
és a setReadTimeout()
metódusokkal állíthatjuk be.
3. Hogyan olvashatom a válasz tartalmát egy HttpURLConnection
objektumból?
A válasz tartalmát az getInputStream()
metódussal kapott InputStream
objektum segítségével olvashatjuk.
4. Hogyan küldhetek fájlokat egy HTTP POST kéréssel?
A fájlok küldéséhez a setDoOutput(true)
metódussal engedélyezzük a kérelem testét, majd a getOutputStream()
metódussal kapott OutputStream
objektum segítségével írjuk a fájl tartalmát.
5. Hogyan kezelhetem a HTTP hibákat?
A HTTP hibákat a getResponseCode()
metódussal kapott válasz kódjának ellenőrzésével kezelhetjük. Ha a válasz kódja nem 200 (OK), akkor a kérés sikertelen volt.
6. Hogyan lehet beállítani a Content-Type
fejlécet egy POST kéréshez?
A Content-Type
fejléc beállításához a setRequestProperty("Content-Type", "érték")
metódust használjuk.
7. Hogyan lehet beállítani a User-Agent
fejlécet egy HTTP kéréshez?
A User-Agent
fejléc beállításához a setRequestProperty("User-Agent", "érték")
metódust használjuk.
8. Hogyan lehet beállítani az Accept
fejlécet egy HTTP kéréshez?
Az Accept
fejléc beállításához a setRequestProperty("Accept", "érték")
metódust használjuk.
9. Milyen más HTTP fejlécek állíthatók be az HttpURLConnection
osztály segítségével?
Az HttpURLConnection
osztály segítségével beállíthatjuk az összes általános HTTP fejlécet, például a Authorization
, Cookie
, Cache-Control
és If-Modified-Since
fejléceket.
10. Mik a leggyakoribb hibák, amelyek az HttpURLConnection
osztály használatakor előfordulhatnak?
A leggyakoribb hibák a hálózati kapcsolatok megszakadása, a szerver nem válaszol, a rossz URL-cím megadása vagy a jogosultság hiánya lehet.
Címkék: Java, HttpURLConnection, HTTP, GET kérés, POST kérés, hálózati kommunikáció, fejlécek, válaszok, hibakezelés