❶ android okhttp post json和get有什麼區別
區別是:
Get:是以實體的方式得到由請求URI所指定資源的信息,如果請求URI只是一個數據產生過程,那麼最終要在響應實體中返回的是處理過程的結果所指向的資源,而不是處理過程的描述。
Post:用來向目的伺服器發出請求,要求它接受被附在請求後的實體,並把它當作請求隊列中請求URI所指定資源的附加新子項,Post被設計成用統一的方法實現下列功能:
1:對現有資源的解釋
2:向電子公告欄、新聞組、郵件列表或類似討論組發信息。
3:提交數據塊
4:通過附加操作來擴展資料庫
Android系統提供了兩種HTTP通信類,HttpURLConnection和HttpClient。
關於HttpURLConnection和HttpClient的選擇>>官方博客
盡管Google在大部分安卓版本中推薦使用HttpURLConnection,但是這個類相比HttpClient實在是太難用,太弱爆了。
OkHttp是一個相對成熟的解決方案,據說Android4.4的源碼中可以看到HttpURLConnection已經替換成OkHttp實現了。所以我們更有理由相信OkHttp的強大。
OkHttp 處理了很多網路疑難雜症:會從很多常用的連接問題中自動恢復。如果您的伺服器配置了多個IP地址,當第一個IP連接失敗的時候,OkHttp會自動嘗試下一個IP。OkHttp還處理了代理伺服器問題和SSL握手失敗問題。
使用 OkHttp 無需重寫您程序中的網路代碼。OkHttp實現了幾乎和java.net.HttpURLConnection一樣的API。如果你用了 Apache HttpClient,則OkHttp也提供了一個對應的okhttp-apache 模塊。
❷ android post請求和get請求的區別
Get請求與Post請求的區別
Get是向伺服器發索取數據的一種請求,而Post是向伺服器提交數據的一種請求
Get是獲取信息,而不是修改信息,類似資料庫查詢功能一樣,數據不會被修改
Get請求的參數會跟在url後進行傳遞,請求的數據會附在URL之後,以?分割URL和傳輸數據,參數之間以&相連,%XX中的XX為該符號以16進製表示的ASCII,如果數據是英文字母/數字,原樣發送,如果是空格,轉換為+,如果是中文/其他字元,則直接把字元串用BASE64加密。
Get傳輸的數據有大小限制,因為GET是通過URL提交數據,那麼GET可提交的數據量就跟URL的長度有直接關系了,不同的瀏覽器對URL的長度的限制是不同的。
GET請求的數據會被瀏覽器緩存起來,用戶名和密碼將明文出現在URL上,其他人可以查到歷史瀏覽記錄,數據不太安全。在伺服器端,用Request.QueryString來獲取Get方式提交來的數據
Post請求則作為http消息的實際內容發送給web伺服器,數據放置在HTML Header內提交,Post沒有限制提交的數據。Post比Get安全,當數據是中文或者不敏感的數據,則用get,因為使用get,參數會顯示在地址,對於敏感數據和不是中文字元的數據,則用post
POST表示可能修改變伺服器上的資源的請求,在伺服器端,用Post方式提交的數據只能用Request.Form來獲取
❸ 安卓http和https的區別
HTTPS()安全超文本傳輸協議它是一個安全通信通道,它基於HTTP開發,用於在客戶計算機和伺服器之間交換信息。它使用安全套接字層(SSL)進行信息交換,簡單來說它是HTTP的安全版。它是由Netscape開發並內置於其瀏覽器中,用於對數據進行壓縮和解壓操作,並返回網路上傳送回的結果。HTTPS實際上應用了Netscape的安全全套接字層(SSL)作為HTTP應用層的子層。(HTTPS使用埠443,而不是象HTTP那樣使用埠80來和TCP/IP進行通信。)SSL使用40位關鍵字作為RC4流加密演算法,這對於商業信息的加密是合適的。HTTPS和SSL支持使用X.509數字認證,如果需要的話用戶可以確認發送者是誰。HTTPS和HTTP的區別:https協議需要到ca申請證書,一般免費證書很少,需要交費。http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議http和https使用的是完全不同的連接方式用的埠也不一樣,前者是80,後者是443。http的連接很簡單,是無狀態的HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議要比http協議安全HTTPS解決的問題:1.信任主機的問題.採用https的server必須從CA申請一個用於證明伺服器用途類型的證書.改證書只有用於對應的server的時候,客戶度才信任次主機.所以目前所有的銀行系統網站,關鍵部分應用都是https的.客戶通過信任該證書,從而信任了該主機.其實這樣做效率很低,但是銀行更側重安全.這一點對我們沒有任何意義,我們的server,採用的證書不管自己issue還是從公眾的地方issue,客戶端都是自己人,所以我們也就肯定信任該server.2.通訊過程中的數據的泄密和被竄改1.一般意義上的https,就是server有一個證書.a)主要目的是保證server就是他聲稱的server.這個跟第一點一樣.b)服務端和客戶端之間的所有通訊,都是加密的.i.具體講,是客戶端產生一個對稱的密鑰,通過server的證書來交換密鑰.一般意義上的握手過程.ii.加下來所有的信息往來就都是加密的.第三方即使截獲,也沒有任何意義.因為他沒有密鑰.當然竄改也就沒有什麼意義了.2.少許對客戶端有要求的情況下,會要求客戶端也必須有一個證書.a)這里客戶端證書,其實就類似表示個人信息的時候,除了用戶名/密碼,還有一個CA認證過的身份.應為個人證書一般來說上別人無法模擬的,所有這樣能夠更深的確認自己的身份.b)目前少數個人銀行的專業版是這種做法,具體證書可能是拿U盤作為一個備份的載體.HTTPS一定是繁瑣的.a)本來簡單的http協議,一個get一個response.由於https要還密鑰和確認加密演算法的需要.單握手就需要6/7個往返.i.任何應用中,過多的roundtrip肯定影響性能.b)接下來才是具體的http協議,每一次響應或者請求,都要求客戶端和服務端對會話的內容做加密/解密.i.盡管對稱加密/解密效率比較高,可是仍然要消耗過多的CPU,為此有專門的SSL晶元.如果CPU信能比較低的話,肯定會降低性能,從而不能serve的請求.ii.加密後數據量的影響.所以,才會出現那麼多的安全認證提示
❹ android中httpservletrequest、hettpservletresponse、 httpget 、httppost 四者的區別
這些都不是android特有的,java裡面一直以來都有,分下類的話,前兩個是server端的,後兩個是client端的,其中,
httpservletrequest是在server端用來取http請求發過來的數據,比如header,parameter等等。
httpservletresponse是server端用來給client端返回數據,即response。
httpget是client端用來發送http協議的get請求。
httppost是client端用來發送http協議的post請求。
具體的看javadoc,不過建議你從網路基礎知識學起。
❺ android get和post的區別
1. get是從伺服器上獲取數據,post是向伺服器傳送數據。
2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
3. 對於get方式,伺服器端用Request.QueryString獲取變數的值,對於post方式,伺服器端用Request.Form獲取提交的數據。
4. get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。
5. get安全性非常低,post安全性較高。但是執行效率卻比Post方法好。
建議:
1、get方式的安全性較Post方式要差些,包含機密信息的話,建議用Post數據提交方式;
2、在做數據查詢時,建議用Get方式;而在做數據添加、修改或刪除時,建議用Post方式;
❻ android中post請求怎麼傳輸內容
一、需要用到的場景
在jQuery中使用$.post()就可以方便的發起一個post請求,在android程序中有時也要從伺服器獲取一些數據,就也必須得使用post請求了。
二、需要用到的主要類
在android中使用post請求主要要用到的類是HttpPost、HttpResponse、EntityUtils
三、主要思路
1、創建HttpPost實例,設置需要請求伺服器的url。
2、為創建的HttpPost實例設置參數,參數設置時使用鍵值對的方式用到NameValuePair類。
3、發起post請求獲取返回實例HttpResponse
4、使用EntityUtils對返回值的實體進行處理(可以取得返回的字元串,也可以取得返回的byte數組)
代碼也比較簡單,注釋也加上了,就直接貼出來了
[java]
package com.justsy.url;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.os.Bundle;
public class HttpURLActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("start url...");
String url = "http://192.168.2.112:8080/JustsyApp/Applet";
// 第一步,創建HttpPost對象
HttpPost httpPost = new HttpPost(url);
// 設置HTTP POST請求參數必須用NameValuePair對象
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("action", "downloadAndroidApp"));
params.add(new BasicNameValuePair("packageId", "89dcb664-50a7-4bf2-aeed-49c08af6a58a"));
params.add(new BasicNameValuePair("uuid", "test_ok1"));
HttpResponse httpResponse = null;
try {
// 設置httpPost請求參數
httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
httpResponse = new DefaultHttpClient().execute(httpPost);
//System.out.println(httpResponse.getStatusLine().getStatusCode());
if (httpResponse.getStatusLine().getStatusCode() == 200) {
// 第三步,使用getEntity方法活得返回結果
String result = EntityUtils.toString(httpResponse.getEntity());
System.out.println("result:" + result);
T.displayToast(HttpURLActivity.this, "result:" + result);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("end url...");
setContentView(R.layout.main);
}
}
ADD:使用HttpURLConnection 進行post請求
[java]
String path = "http://192.168.2.115:8080/android-web-server/httpConnectServlet.do?PackageID=89dcb664-50a7-4bf2-aeed-49c08af6a58a";
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(5000);
System.out.println(conn.getResponseCode());
============================================================================================================================
通過get和post方式向伺服器發送請求
首先說一下get和post的區別
get請求方式是將提交的參數拼接在url地址後面,例如http://www..com/index.jsp?num=23&jjj=888;
但是這種形式對於那種比較隱私的參數是不適合的,而且參數的大小也是有限制的,一般是1K左右吧,對於上傳文件
就不是很適合。
post請求方式是將參數放在消息體內將其發送到伺服器,所以對大小沒有限制,對於隱私的內容也比較合適。
如下Post請求
POST /LoginCheck HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://192.168.2.1/login.asp
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; BOIE9;ZHCN)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: 192.168.2.1
Content-Length: 39
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: language=en
Username=admin&checkEn=0&Password=admin //參數位置
在android中用get方式向伺服器提交請求:
在android模擬器中訪問本機中的tomcat伺服器時,注意:不能寫localhost,因為模擬器是一個單獨的手機系統,所以要寫真是的IP地址。
否則無法訪問到伺服器。
//要訪問的伺服器地址,下面的代碼是要向伺服器提交用戶名和密碼,提交時中文先要經過URLEncoder編碼,因為模擬器默認的編碼格式是utf-8
//而tomcat內部默認的編碼格式是ISO8859-1,所以先將參數進行編碼,再向伺服器提交。
private String address = "http://192.168.2.101:80/server/loginServlet";
public boolean get(String username, String password) throws Exception {
username = URLEncoder.encode(username);// 中文數據需要經過URL編碼
password = URLEncoder.encode(password);
String params = "username=" + username + "&password=" + password;
//將參數拼接在URl地址後面
URL url = new URL(address + "?" + params);
//通過url地址打開連接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//設置超時時間
conn.setConnectTimeout(3000);
//設置請求方式
conn.setRequestMethod("GET");
//如果返回的狀態碼是200,則一切Ok,連接成功。
return conn.getResponseCode() == 200;
}
在android中通過post方式提交數據。
public boolean post(String username, String password) throws Exception {
username = URLEncoder.encode(username);// 中文數據需要經過URL編碼
password = URLEncoder.encode(password);
String params = "username=" + username + "&password=" + password;
byte[] data = params.getBytes();
URL url = new URL(address);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(3000);
//這是請求方式為POST
conn.setRequestMethod("POST");
//設置post請求必要的請求頭
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 請求頭, 必須設置
conn.setRequestProperty("Content-Length", data.length + "");// 注意是位元組長度, 不是字元長度
conn.setDoOutput(true);// 准備寫出
conn.getOutputStream().write(data);// 寫出數據
return conn.getResponseCode() == 200;
}