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?

Was dit nuttig?

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 .

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top