java 的http請求方式:HttpURLConnection和HttpClient,

來源:互聯網
上載者:User

java 的http請求方式:HttpURLConnection和HttpClient,

1、要瞭解一些概念性的東西,比如Http的協議以及協議頭等一些東東

2、HttpURLConnection一般步驟:建立URL對象==》擷取URL的HttpURLConnection對象執行個體==》設定HTTP請求使用的方法==》設定逾時和訊息頭==》對伺服器響應碼判斷==》獲得伺服器返回的輸入資料流==》關掉HTTP串連

2.1、GET請求樣本

//建立URL對象,xxx是伺服器APIURL url = new URL("xxx");//調用URL對象的openConnection( )來擷取HttpURLConnection對象執行個體HttpURLConnection conn = (HttpURLConnection) url.openConnection();//要求方法為GETconn.setRequestMethod("GET");//設定連線逾時為5秒conn.setConnectTimeout(5000);//伺服器返回東西了,先對響應碼判斷if (conn.getResponseCode() == 200) {    //用getInputStream()方法獲得伺服器返回的輸入資料流    InputStream in = conn.getInputStream();    byte[] data = read(in); //流轉換為位元組,read()自己寫的是轉換方法    String html = new String(data, "UTF-8");    System.out.println(html);    in.close();}

ps:上述步驟基於伺服器介面正常的前提下,當然異常要另外處理,要求標頭按實際需要設定,得到伺服器返回的輸入資料流後按需要轉換使用,另外有時候網路請求要開一條線程

2.2、POST請求:POST請求大體和GET一致,只是設定相關參數的時候要注意設定允許輸入、輸出,還有POST方法不能緩衝,要手動設定為false

//建立URL對象,xxx是伺服器APIURL url = new URL("xxx");//調用URL對象的openConnection( )來擷取HttpURLConnection對象執行個體HttpURLConnection conn = (HttpURLConnection) url.openConnection();//要求方法為GETconn.setRequestMethod("POST");//設定連線逾時為5秒conn.setConnectTimeout(5000);//允許輸入輸出conn.setDoInput(true);conn.setDoOutput(true);//不能緩衝conn.setUseCaches(false);//至少要設定的兩個要求標頭conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");//輸出資料流包含要發送的資料,要注意資料格式編碼OutputStream op=conn.getOutputStream();op.write(new String("name=zhylioooo").getBytes());//伺服器返回東西了,先對響應碼判斷if (conn.getResponseCode() == 200) {    //用getInputStream()方法獲得伺服器返回的輸入資料流    InputStream in = conn.getInputStream();    byte[] data = read(in); //流轉換為位元組,read()是轉換方法    String html = new String(data, "UTF-8");    System.out.println(html);    in.close();}

3、HttpClient的使用步驟:建立HttpClient對象==》建立Http請求對象(GET、POST不同)==》佈建要求參數==》執行請求==》擷取響應對象==》對響應對象處理==》關閉相應對象==》關閉HttpClient

3.1、GET

      //建立httpclient對象            CloseableHttpClient httpclient = HttpClients.createDefault();            //建立GET對象            HttpGet httpget = new HttpGet("xxx");//xxx是伺服器API            //執行請求            CloseableHttpResponse response = httpclient.execute(httpget);            if(response.getStatusLine().getStatusCode()==200) {                HttpEntity entity = response.getEntity();                //所需內容都在entity裡面,這裡可以對資料操作                String detail = EntityUtils.toString(entity,"UTF-8");                System.out.println(detail);            }            response.close();            httpclient.close();

如果需要參數,可以用URIBuilder工具類來簡化

URI uri = new URIBuilder()        .setScheme("https")        .setHost("xxx")        .setPath("/xxx")        .setParameter("key1", "value1")        .setParameter("key2", "value2")        .build();HttpGet httpget = new HttpGet(uri);

3.2、POST:POST一般用於提交一些特別的東西,內容多種多樣,HttpClient針對不同內容提供了不同的資料容器,如最常見的字串(StringEntity),位元組數組(ByteArrayEntity),輸入資料流(InputStreamEntity),和檔案(FileEntity),請注意InputStreamEntity是不可重複的,因為它只能從底層資料流中讀取一次。一般建議實現一個自訂HttpEntity類,而不是使用泛型InputStreamEntity。 FileEntity可以是一個很好的起點:

File file = new File("xxx.txt");FileEntity entity = new FileEntity(file,     ContentType.create("text/plain", "UTF-8"));        HttpPost httppost = new HttpPost("xxx");httppost.setEntity(entity);

POST最常見的提交表單資料:建立完HttpPost對象後,通過NameValuePair集合來儲存等待提交的參數,並將參數傳遞到UrlEncodedFormEntity中,最後調用setEntity(entity)完成, HttpClient.execute(HttpPost)即可:

List<NameValuePair> formparams = new ArrayList<NameValuePair>();formparams.add(new BasicNameValuePair("name", "zhylioooo"));formparams.add(new BasicNameValuePair("pswd", "123456"));UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);HttpPost httppost = new HttpPost("xxx");httppost.setEntity(entity);

4、一般實際開發很少自己寫HttpURLConnection和HttpClient,都是用別人封裝 好的第三方網路請求架構,例如:Volley,android-async-http,loopj等,因為網路操作涉及到 非同步以及多線程,自己動手寫的話很麻煩,所以實際開發還是直接用第三方。

5、HttpClient用到的jar包:https://pan.baidu.com/s/1gfjHi2B

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.