JAVA——建立HTTP通訊(GET/POST方式)
阿新 • • 發佈:2018-11-10
建立HTTP通訊(GET/POST方式)
1.要求
此程式可以建立HTTP通訊,以GET方式和POST方式向WEB伺服器提交資訊,並接收WEB伺服器返回的響應。
2.GET和POST請求
GET請求:
- GET查詢字串(名稱/值對)是在 GET 請求的 URL 中傳送的:
- GET 請求可被快取
- GET 請求保留在瀏覽器歷史記錄中
- GET 請求可被收藏為書籤
- GET 請求不應在處理敏感資料時使用
- GET 請求有長度限制
- GET 請求只應當用於取回資料
POST請求
- POST查詢字串(名稱/值對)是在 POST 請求的 HTTP 訊息主體中傳送的
- POST 請求不會被快取
- POST 請求不會保留在瀏覽器歷史記錄中
- POST 不能被收藏為書籤
- POST 請求對資料長度沒有要求
3.實現過程
- 使用GET方法進行通訊,主要實在建立URL連結後通過URLconnection例項呼叫getInputStream方法得到資料流,然後進行輸出。
- 使用POST方法進行通訊,與GET不用的是需要把請求放在Http正文中。 具體的步驟: 首先,建立URL。 其次開啟連結,設定允許讀取和上傳的許可權。 然後,設定讀取方式為POST,建立輸出流,將向伺服器傳輸的資料一次性寫出,再獲取輸入流,從輸入流中讀取資料。
4.測試API地址
本文所使用的測試API介面地址如下:
https://cre.dp.sina.cn/api/v3/get?cateid=I&cre=tianyi&mod=wedu&merge=3&statics=1&length=20&tm=1489716199&ad={%22rotate_count%22:1144,%22page_url%22:%22https%3A%2F%2Fedu.sina.cn%2F%22,%22channel%22:%22130270%22,%22platform%22:%22wap%22,%22timestamp%22:1515924429346,%22net%22:null}&action=1&up=2&down=0&length=12&_=1515924436197&callback=Zepto1515924429314
(若想更換為其他用於測試的API地址可點選此處)
5.程式碼
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class rw28 {
public static void main(String[] args) {
// TODO Auto-generated method stub
new GetRun().start();//get請求
new PostRun().start();//post請求
}
}
class GetRun extends Thread{
public void run() {
try {
//doctype=xml/json/jsonp
URL url = new URL("http://www.kuaidi100.com/query?type=yuantong&postid=11111111111");
URLConnection connection = url.openConnection();
InputStream in = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(in,"utf-8");
BufferedReader br = new BufferedReader(isr);
String line;
StringBuilder sb = new StringBuilder();
while((line = br.readLine()) != null)
{
sb.append(line);
}
br.close();
isr.close();
in.close();
System.out.println("使用GET方式得:\n"+sb.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class PostRun extends Thread{
@Override
public void run() {
try {
URL url = new URL("http://www.kuaidi100.com/query");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.addRequestProperty("encoding", "UTF-8");//新增請求屬性
connection.setDoInput(true);//允許輸入
connection.setDoOutput(true);//允許輸出
connection.setRequestMethod("POST");//POST請求要在獲取輸入輸出流之前設定否則報錯
//輸出
OutputStream os = connection.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
bw.write("type=yuantong&postid=11111111111");
bw.flush();
//輸入
InputStream in = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(in,"UTF-8");
BufferedReader br = new BufferedReader(isr);
String line;
StringBuilder sb = new StringBuilder();
while((line = br.readLine()) != null)
{
sb.append(line);
}
bw.close();
osw.close();
os.close();
br.close();
isr.close();
in.close();
System.out.println("使用POST方式得:\n"+sb.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
6.結果
編譯結果如下圖所示:
執行結果如下圖所示:
GET方法:
POST方法:
7.GET/POST的區別
- get請求一般會把引數附著在請求的後面,並用?隔開。這樣的話引數容易暴露,類似密碼這樣的引數等。
特點:傳送的資料是有限制的,一般限制在1kb以下;
例如:
Request URL:
http://localhost:8080/JavaWeb_001/actionServlet?user=zhangqin&password=zhangqin&submit=submit
- post請求的方式傳送的表單欄位元素以及其資料作為http實體內容傳送給web伺服器,傳送的資料量比get請求大得多。
如下所示:
Request URL:http://localhost:8080/JavaWeb_001/actionServlet
Request Method:POST
Status Code:404 Not Found
Remote Address:[::1]:8080
Referrer Policy:no-referrer-when-downgrade
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:45
Content-Type:application/x-www-form-urlencoded
Host:localhost:8080
Origin:http://localhost:8080
Referer:http://localhost:8080/JavaWeb_001/login.html
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3004.3 Safari/537.36
user:zhangqin
password:zhangqin
submit:submit ----請求中傳遞的資料引數