Maak nuwe URL(...).openConnection() noodwendig'n POST?
Vra
As ek die skep van'n HTTP - java.net.URL
en dan noem openConnection()
op dit, beteken dit nie noodwendig impliseer dat'n HTTP post gaan gebeur?Ek weet dat openStream()
impliseer'n KRY.As dit so is, hoe het jy uit te voer een van die ander HTTP werkwoorde sonder om te werk met die rou socket layer?
Oplossing
As jy haal die URLConnection
voorwerp gebruik openConnection()
dit maak nie eintlik begin kommunikasie met die bediener.Wat nie gebeur totdat jy kry die stroom van die URLConnection()
.Wanneer jy die eerste keer die konneksie wat jy kan byvoeg/verander kop-en ander verband eienskappe eintlik voor die opening van dit.
URLConnection se lewensiklus is'n bietjie vreemd.Dit maak nie stuur die kop na die bediener totdat jy gekry het om een van die strome.As jy net die inset stroom dan glo ek is dit nie'n te KRY, stuur die kop, dan kan jy lees die uitset.As jy die uitset stroom dan glo ek dit stuur dit as'n BOODSKAP, as dit veronderstel jy sal wees om die skryf van data om dit (wat Jy dalk nodig het om te bel setDoOutput(true)
vir die uitset stroom om te werk).So gou As wat jy kry die inset stroom die uitset stroom is gesluit en dit wag vir die reaksie van die bediener.
Byvoorbeeld, hierdie moet doen om'n POS:
URL myURL = new URL("http://example.com/my/path");
URLConnection conn = myURL.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
OutputStream os = conn.getOutputStream();
os.write("Hi there!");
os.close();
InputStream is = conn.getInputStream();
// read stuff here
Terwyl dit sou doen KRY:
URL myURL = new URL("http://example.com/my/path");
URLConnection conn = myURL.openConnection();
conn.setDoOutput(false);
conn.setDoInput(true);
InputStream is = conn.getInputStream();
// read stuff here
URLConnection
sal ook ander vreemde dinge.As die bediener spesifiseer'n inhoud lengte dan URLConnection
sal hou van die onderliggende insette stroom oop totdat dit ontvang dat baie data, selfs as jy uitdruklik naby dit.Dit het veroorsaak dat'n baie probleme vir ons as dit gemaak sluit ons kliënt af skoon'n bietjie moeilik, as die URLConnection
hou die netwerk konneksie maak.Dit is waarskynlik waarskynlik bestaan, selfs as jy net gebruik getStream()
al is.
Ander wenke
Nee, dit nie doen. Maar as die protokol van die URL is HTTP, sal jy 'n HttpURLConnection
as 'n terugkeer voorwerp. Hierdie klas het 'n setRequestMethod
metode om te spesifiseer watter HTTP metode jy wil gebruik.
As jy wil meer gesofistikeerde dinge doen jy waarskynlik beter daaraan toe met behulp van 'n biblioteek soos Jakarta HttpClient .