рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ java.net рдХрд╛ HttpUrlConnection

рд╕реНрд╡рд╛рдЧрдд

рдЖрдЬ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдХреИрд╕реЗ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬреЗрдЖрд░рдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ URLConnection рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HTTP рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдЬрд╛рд╡рд╛ рдХреЛ рдСрдирд▓рд╛рдЗрди рд╕реАрдЦ рд░рд╣реЗ рд╣реИрдВред рд╣рдорд╛рд░реА рдкреВрд░реА рдЯреАрдо рдХрд╛рдо рдФрд░ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрд▓реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрд▓реИрдХ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИ), рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣реВрдВрдЧрд╛: рд╕реНрд▓реИрдХ рдПрдкреАрдЖрдИ рдХреЛ рдПрдЪрдЯреАрдЯреАрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдпреВрдЖрд░рдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдкреАрдЖрдИ рд╕реЗ рд╣реЛрд╕реНрдЯ рдкрддрд╛ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ред slack.com рдпрд╣рд╛рдБ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ:
  • users.list
  • chat.postMessage
  • conversations.create
  • files.upload
  • im.open

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реВрдЪреА рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдХреНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдЪрд╛рд╣рд┐рдПред рд╡рд┐рдзрд┐ред рд╣рдо рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ URI - /api/users.list рдмрдирд╛рддреЗ рд╣реИрдВ ред рдлреЙрд░реНрдо рдПрдкреНрд▓реАрдХреЗрд╢рди / x-www-form-urlencoded рдореЗрдВ рдПрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЯреЛрдХрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд, рдЕрдиреБрд░реЛрдз рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП (рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬреЛ рдирд┐рдореНрди рд╣реЛрдЧрд╛):

GET /users.list HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=xoxp-1234567890-098765-4321-a1b2c3d4e5 


рдореИрдВ рдЕрдкрд╛рдЪреЗ HttpCompords рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдиреБрд╕рдВрдзрд╛рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдо рдорд╛рдирдХ рдЬрд╛рд╡рд╛ 8 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН java.net.URLConnection рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

URLConnection рдЗрдХрд╛рдИ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ java.net.URL рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рд▓реЗрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, httpsред

URL рдЗрдХрд╛рдИ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо OpenConnection () рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ HttpsUrlConnection рдЗрдХрд╛рдИ рдХреЛ рд▓реМрдЯрд╛рдПрдЧреАред

 String url = тАЬhttps://slack.com/api/users.listтАЭ; URLConnection connection = new URL(url).openConnection(); 

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ MalformedUrlException рдФрд░ IOException рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдпрд╛ рдлреЗрдВрдХрдирд╛ рд╣реЛрдЧрд╛ред

рдЙрд╕рдХреЗ рдмрд╛рдж, рдХрдиреЗрдХреНрд╢рди рдЪрд░ HttpsUrlConnectionImpl рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдПрдХ GET рдЕрдиреБрд░реЛрдз рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред рдПрдХ рд╣реЗрдбрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо setRequestProperty () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХреБрдВрдЬреА рдФрд░ рдорд╛рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдПрдХ рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореВрд▓реНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ / x-www-form-urlencoded рд╣реИ ред рдЦреИрд░, рдФрд░ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ!
 connection.setRequestProperty(тАЬContent-TypeтАЭ, тАЬapplication/x-www-form-urlencodedтАЭ); 

рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рдЯреЛрдХрди рд▓рд┐рдЦрдиреЗ рдФрд░ рд╢рд░реАрд░ рдореЗрдВ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдиреЗрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ doOutput рдлрд╝реАрд▓реНрдб рдХреЛ setDoOutput () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ;

 connection.setDoOutput(true); 

рдЕрдЧрд▓рд╛, рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕рд╛ - рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╣рдорд╛рд░реЗ рд╢рд░реАрд░ рдХреЛ рдЖрдЙрдЯрдкреБрдЯрд╕реНрдЯреНрд░реАрдо рдореЗрдВ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо OutputStreamWriter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

 OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); 

рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реИ: рдЬрдм рд╣рдо getOutputStream () рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐ POST рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ GET рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрд▓реИрдХ рд╡рд┐рдзрд┐ рдкрд░ рд╕рдЦреНрдд рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдареАрдХ рдерд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП GET рдЕрдиреБрд░реЛрдз рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
 GET /users.list?token=xoxp-1234567890-098765-4321-a1b2c3d4e5&limit=100 HTTP/1.1 Content-Type: application/x-www-form-urlencoded 

рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдорд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдЗрд╕ рддрд░рд╣ рдирд┐рдХрд▓рд╛:

 POST /users.list HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=xoxp-1234567890-098765-4321-a1b2c3d4e5 

(* рдХреБрдЫ рд╣реЗрдбрд░ рд╕реНрд╡рдпрдВ HttpsUrlConnection рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рд╡реЗ рдпрд╣рд╛рдВ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИрдВ)

рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдз рд╢рд░реАрд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ();
 String reqBody = тАЬtoken=xoxp-1234567890-098765-4321-a1b2c3d4e5&limit=100тАЭ; writer.write(reqBody); writer.close(); 

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред InputStream рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ OutputStream рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдпрд╛ рдлреНрд▓рд╢ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЕрдиреНрдпрдерд╛ рдбреЗрдЯрд╛ рдмрдлрд░ рдХреЛ рдирд╣реАрдВ рдЫреЛрдбрд╝реЗрдЧрд╛ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк PrintStream рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - Println () рд╡рд┐рдзрд┐ рдореЗрдВ, flush () рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдмрдлрд╝рд░рдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:
 StringBuilder respBody = new StringBuilder(); BufferedReader reader = new BufferedReader(connection.getInputStream()); reader.lines().forEach(l -> respBody.append(l + тАЬ\r\nтАЭ); reader.close(); 

(* рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╕реНрдЯреНрд░реАрдо рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП () рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ; \ r \ n - CRLF рд╡рд░реНрдг - рдПрдХ рдирдИ рд▓рд╛рдЗрди рдореЗрдВ рдПрдХ рд╕рдВрдХреНрд░рдордг рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ)

рдФрд░, рдЕрдЧрд░ рд╣рдо рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдЪрд░ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рд╣рдорд╛рд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рдж, рд╕рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 package main.java.com.bilichenko.learning; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.nio.charset.Charset; import java.util.Optional; import java.util.stream.Collectors; public class SlackClient { private static final String HOST = "https://api.slack.com"; private static final String GET_USERS_URI = "/api/users.list"; private static final String TOKEN = "xx-ooo-YOUR-TOKEN-HERE"; public static void main(String[] args) throws IOException { SlackClient slackClient = new SlackClient(); System.out.println(slackClient.getRawResponse(HOST + GET_USERS_URI, "application/x-www-form-urlencoded", "token=" + TOKEN).orElse("no response")); } public Optional<String> getRawResponse(String url, String contentType, String requestBody) throws MalformedURLException, IOException { HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); connection.setRequestProperty("Content-Type", contentType); connection.setConnectTimeout(10000); connection.setRequestMethod("POST"); connection.setDoOutput(true); try(OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream())) { writer.write(requestBody); } if (connection.getResponseCode() != 200) { System.err.println("connection failed"); return Optional.empty(); } try(BufferedReader reader = new BufferedReader( new InputStreamReader(connection.getInputStream(), Charset.forName("utf-8")))) { return Optional.of(reader.lines().collect(Collectors.joining(System.lineSeparator()))); } } } 

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрджрдЧрд╛рд░ рдерд╛!

Source: https://habr.com/ru/post/hi459080/


All Articles