1. 程式人生 > >HttpURLConnection ----GET請求 和 POST請求:

HttpURLConnection ----GET請求 和 POST請求:

你想要了解HttpUrlConnection嗎?
————瞭解一個httpUrlConnection請求的順序:

-帶著問題你看我的文章,理解起來會簡單許多!

1. 怎麼獲取HttpURLConnection呢?為什麼要拿它?
2. HttpURLConnection要配置那些資訊?
3. 基本引數怎麼上傳,檔案怎麼上傳?
4. 傳送請求之後怎麼接受請求返回的資訊?
5. 請求可能碰到的問題,可能的編碼問題!

一 . 獲取HttpURLConnection ——getHttpURLConnection

     //url_path是訪問的地址
URL url = new URL(url_path); //這裡用URL獲取URLConnection,因為沒有構造方法 URLConnection urlConnection = url.openConnection(); //轉成HttpURLConnection因為該類的方法多 HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;

二 . 配置 ——HttpURLConnectionConfig

   httpURLConnection.setDoOutput(doOutPut); //設定是否向httpUrlConnection輸出,post請求,引數要放在http正文內,因此需要設為true, 預設情況下是false;
httpURLConnection.setDoInput(doInPut); // 設定是否從httpUrlConnection讀入,預設情況下是true; httpURLConnection.setUseCaches(useCache); // Post 請求不能使用快取 httpURLConnection.setRequestMethod(method); //請求的方法:預設是GET請求 httpURLConnection.setRequestProperty("Charsert", "UTF-8"); //設定編碼為UTF-8 // 設定內容型別 httpURLConnection.setRequestProperty("Content-Type"
, "multipart/form-data; boundary=" +BOUNDARY); httpURLConnection.setConnectTimeout(6000); //連線 1 min 超時 httpURLConnection.setReadTimeout(6000); //讀取 1 min 超時 httpURLConnection.connect(); //向URL傳送連線,getOutputStream()方法中

三 . 基本引數的上傳——– get_Param / post_Param

(1)get請求引數上傳(因為get上傳引數是可見的,傳送的資訊大小也有限制,所以我這裡就寫基本的GET請求)

    setUrl(url+"?"+get_Param(param));   //直接讀取上傳的Map,拼接到URL後面,get_param 方法在後面檔案中有!

(2) post請求引數上傳 (正版的表單上傳,有基本資料,有檔案上傳(包含圖片喲))

httpURLConnection.getOutputStream()   //拿到這個stream才能將引數傳出去

os=new DataOutputStream(httpURLConnection.getOutputStream());  //這只是一種例子,不一定是DataOutputStream

//普通引數的格式規範
            StringBuilder sb= new StringBuilder();
            sb.append("--" + BOUNDARY + "\r\n");
            sb.append("Content-Disposition: form-data; name=\""+name+"\"\r\n");
            sb.append("\r\n");
            sb.append(value);
            sb.append("\r\n");
            System.out.print(sb.toString());     //展示請求報文
            os.write(sb.toString().getBytes("UTF-8"));

//檔案引數的格式規範
            StringBuilder sb=new StringBuilder();
            sb.append("--" + BOUNDARY + "\r\n");
            sb.append("Content-Disposition: form-data; name=\"" + name + "\"; filename=\"" +      value.getName()+"\"");
            sb.append("\r\n");
            sb.append("Content-Type: " + getContentType(value) + "\r\n");
            sb.append("\r\n");
            os.write(sb.toString().getBytes("UTF-8"));
            get_Bytes(value);
            os.writeBytes("\r\n");
            System.out.print(sb.toString());     //展示請求報文

//引數的結尾一定要加上
            os.writeBytes("--" + BOUNDARY + "--" + "\r\n");
            os.writeBytes("\r\n");

四 . 判斷請求是否成功,成功之後怎麼接受返回的資訊—respResult

 private static String respResult()throws IOException{
        int responseCode=httpURLConnection.getResponseCode();
        if (responseCode != 200) {
            return "responseCode:"+responseCode;
        }
        // 定義BufferedReader輸入流來讀取URL的ResponseData
        InputStreamReader reader= new InputStreamReader(httpURLConnection.getInputStream(),"UTF-8");
        BufferedReader bufferedReader = new BufferedReader(reader);
        String line;
        StringBuffer responseResult=new StringBuffer();
        while ((line = bufferedReader.readLine()) != null) {
            responseResult.append(line);
        }
        return responseResult.toString();
    }

五 . 注意點,以及出錯可能的情況

注意點:
1. 因為HttpURLConnection是一個抽象類,所以不能被直接例項化,通過URL.openConnection()方法得到HttpURLConnection的父類,然後再強轉成HttpURLConnection物件例項。
2. 無論是post請求還是get請求,connect()函式實際上只是建立了一個與伺服器的tcp連線,並沒有實際傳送http請求。但是也可以不通過connect()方法來建立連線,因為getOutputStream()方法會隱式的進行connect。
3. 方法的呼叫順序非常重要,對connection物件的一切配置(就是各種set方法)必須在connect()方法之前呼叫,getOutputStream()方法必須在getInputStream()之前呼叫。
4. 前面說到了各種方法的呼叫順序,那麼為什麼要這樣呢。首先HttpURLConnection物件被建立,然後被指定各種選項(例如連線超時時間,是否使用快取,是否讀取輸出流等),然後與服務端建立連線。如果已經連線成功再設定這些選項將會報錯。
5. post請求引數是放在正文裡面的,正文通過outputStream流寫入的,實際上outputStream是個字串流,往裡面寫入的東西不會立即傳送到網路,而是存在於記憶體緩衝區中,待outputStream流關閉時,根據輸入的內容生成http正文。在getInputStream()函式呼叫的時候,就會把準備好的http請求正式傳送到伺服器了,然後返回一個輸入流,用於讀取伺服器對於此次http請求的返回資訊。即使outputStream流沒有關閉,在呼叫getInputStream()之後再寫入引數也無效了。
6. 引數的內容一定要規範,不能瞎JB修改,不然會出現 500的錯誤。

我自己寫了一個HttpUrlConnection訪問工具,可以下載參考一下哈!
有問題發我郵箱:[email protected] ————————————————————作者:想做方丈的小沙彌

點選下載

相關推薦

HttpURLConnection ----GET請求 POST請求:

你想要了解HttpUrlConnection嗎? ————瞭解一個httpUrlConnection請求的順序: -帶著問題你看我的文章,理解起來會簡單許多! 1. 怎麼獲取HttpURLConnection呢?為什麼要拿它?

微信小程式開發之getpost請求的兩種用法

我們在開發微信小程式,需要進行資料請求,這裡只有get和post兩種.get請求,如下圖 但是呢,在很多情況下光只有get請求是不行的,還必須要有post請求,那麼post請求怎麼寫呢,如下圖 這

J2EE中get方式post請求方式亂碼的解決辦法

J2EE中中文亂碼的問題 J2EE中中文亂碼的問題主要就是出現在瀏覽器給伺服器提交引數資料的時候出現的。而瀏覽器與伺服器傳遞資料的方式有兩種 ①post提交方式,因為post提交方式都是把請求引數放在

HttpUrlConnectionGET方式POST方式請求伺服器

1:GET方式。這種方式比較簡單,直接在URL後面加上引數即可 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.ObjectOutputStre

發送getpost請求時常用的content-type

encode json數據格式 ima for www 下載 orm 文件上傳 服務器 常見的媒體格式類型如下: text/html : HTML格式 text/plain :純文本格式 text/xml : XML格式

HttpClient GETPOST請求

pri execute public methods gre col esp odt stringbu package com.rogue.hclient; import java.io.BufferedReader; import java.io.IOExceptio

http基本getpost請求

read exce pen timeout etc builder pri void tin get請求: private static void httpGet(){ BufferedReader br = null; HttpU

GETPOST請求的區別

cat nal 賬號 span asc 交互 cap 開發 code GET和POST請求的區別 GET請求GET /books/?sex=man&name=Professional HTTP/1.1Host: www.wrox.comUser-Agent: Mo

iOS開發-AFNetworking封裝Get(自定義HTTP Header)Post請求及文件下載

謝謝 filepath pos cat style -type poe repo eth 前面提到AFNetworking是一個很強大的網絡三方庫,首先你需要引入AFNetworking三方庫;如封裝的有誤還請指出,謝謝! 1.Get請求 /**Get請求 url 服務器

python request 接口測試getpost請求

.post .get access username int 用戶 post請求 運行 開發 開發IDE:pycharm python:2.7.10 get請求 # coding: UTF-8 #兼容中文字符,如果沒有這句,程序中有中文字符時,運行會報錯import

小程序的getpost請求頭的區別

type www 成功 ava form brush quest -type function 小程序在使用wx.request()接口 時 header 請求頭默認是這樣的 wx.request({ url: ‘test.php‘, //僅為示例,並非真實的接口

php-getpost請求

output class ray 工作日 打印 init print bsp clas 1.get請求 <?php //判斷20130101是否是工作日 //工作日對應結果為 0, 休息日對應結果為 1, 節假日對應的結果為 2; $url=‘http://www

PHP中使用CURL實現GETPOST請求

由於 protocol 對稱加密 即使 匯報 bst 接口 useragent 拷貝 一、什麽是CURL? cURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多協議,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 庫。使用php的cURL

CURL實現發送GetPost請求(PHP)

結果 基本 釋放 初始 常用 header 理解 介紹 今天 1.cURL介紹   cURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多協議,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 庫。本文將介紹 cURL 的一些高級特性,以及

封裝curl的getpost請求

else 請求 enc con code urn gpo sta url /** * GET 請求 * @param string $url */ function http_get($url){ $oCurl = curl_init(); if(s

C#中GetPost請求的同步及異步方法

iter epo charset result string pty streambuf div httpget 在C#中發起Http請求一般使用HttpWebRequest這個類,下文將使用這個HttpWebRequest對象來對Get和Post的同步及異步請求進行封裝:

getpost請求

OS nbsp alt 請求 ima body bsp .com bubuko get和post請求

js-Ajax-getpost請求

js Ajax get 1:get請求方式:// 1:創建XMLHttpRequest對象 var xhr; if (window.XMLHttpRequest) { // 其他類型的瀏覽器 xhr = new XMLHttpRequest(); } else { // ie瀏覽器

php中模擬postget請求接受請求詳細講解

上傳 有一種 har for nts input time verify 有時 在php中我們經常用到curl拓展來進行模擬post、get請求,下面就來具體說說怎麽模擬: 一、首先模擬post請求: function http_post_data($url, $quer

Http協議中GETPOST請求方法的區別

出場 請求參數 底層 情況下 -type 過去 firefox url sym GET和POST是HTTP請求的兩種基本方法,要說它們的區別,接觸過WEB開發的人都能說出一二。 最直觀的區別就是GET把參數包含在URL中,POST通過request body傳遞