⑴ Okhttp3.2 怎麼取消一個請求
加了在刪啊,取消不掉的,他一上線就可以看見,沒啥關系加了就加了唄,搞不好他忽略了呢,一般我就是有人加我我基本上都忽略不看,希望採納
⑵ android okhttp怎麼添加請求頭
.Builderbuilder=newRequest.Builder().url(url);builder.addHeader(key,value);//將請求頭以鍵值對形式添加,可添加多個請求頭:
finalRequestrequest=builder.build();finalOkHttpClientclient=newOkHttpClient.Builder().readTimeout(30,TimeUnit.SECONDS).connectTimeout(10,TimeUnit.SECONDS).writeTimeout(60,TimeUnit.SECONDS).build();//設置各種超時時間finalCallcall=client.newCall(request);newThread(newRunnable(){@Overridepublicvoidrun(){try{Responseresponse=call.execute();if(response!=null){}else{}}catch(IOExceptione){e.printStackTrace();}}}).start();
⑶ 安卓使用okhttp訪問的網站證書錯誤要怎麼解決
publicStringandroidPost(){Stringrs=null;Stringpath="url/Android_JDBC_SH/AndroidLoginAction";HttpPosthp=newHttpPost(path);//獲取客戶端,用來向伺服器發出請求DefaultHttpClienthc=newDefaultHttpClient();try{//=newBasicNameValuePair("name",name);BasicNameValuePairpa=newBasicNameValuePair("password",password);Listlist=newArrayList();list.add(nm);list.add(pa);//構建向伺服器發送的實體HttpEntityentity=newUrlEncodedFormEntity(list);hp.setEntity(entity);//提交請求,獲取伺服器的響應HttpResponseresponse=hc.execute(hp);if(response.getStatusLine().getStatusCode()==200){//獲取響應實體entity=response.getEntity();rs=EntityUtils.toString(entity);}}catch(ClientProtocolExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}returnrs;}
⑷ okhttp https 怎麼用
您好!
HTTPS是一種應用了SSL證書的加密訪問協議,可以加密網站傳輸數據,比如網路,淘寶都是在用HTTPS加密協議,以後互聯網都會變成HTTPS加密協議,國外互聯網八成都是http加密協議,網站實現HTTPS加密協議需要SSL證書,SSL證書需要到CA機構比如沃通CA機構申請。SSL證書需要付費購買,沃通CA也提供免費的SSL證書,不過免費的SSL知識初級的SSL,高級的SSL證書需要付費購買。
SSL證書需要安裝在網站的伺服器上,目前有一款SSL精靈工具可以實現一鍵部署SSL證書,很方便的。
⑸ 安卓http和https的區別
https為加密的,一般用於錢財相關,如支付寶網站,網上銀行等
HTTPS(Secure Hypertext Transfer Protocol)安全超文本傳輸協議
它是一個安全通信通道,它基於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. 任何應用中,過多的round trip 肯定影響性能.
b) 接下來才是具體的http協議,每一次響應或者請求, 都要求客戶端和服務端對會話的內容做加密/解密.
i. 盡管對稱加密/解密效率比較高,可是仍然要消耗過多的CPU,為此有專門的SSL 晶元. 如果CPU 信能比較低的話,肯定會降低性能,從而不能serve 更多的請求.
ii. 加密後數據量的影響. 所以,才會出現那麼多的安全認證提示
⑹ android okhttp怎麼添加請求頭
finalRequest.Builderbuilder=newRequest.Builder().url(url);
builder.addHeader(key,value);//將請求頭以鍵值對形式添加,可添加多個請求頭
finalRequestrequest=builder.build();
finalOkHttpClientclient=newOkHttpClient.Builder()
.readTimeout(30,TimeUnit.SECONDS)
.connectTimeout(10,TimeUnit.SECONDS)
.writeTimeout(60,TimeUnit.SECONDS)
.build();//設置各種超時時間
finalCallcall=client.newCall(request);
newThread(newRunnable(){
@Override
publicvoidrun(){
try{
Responseresponse=call.execute();
if(response!=null){
}else{
}
}catch(IOExceptione){
e.printStackTrace();
}
}
}).start();
⑺ android中okhttp裡面的請求怎麼配置https
okhttp默認情況下是支持https協議的網站的,你可以直接通過okhttp請求。不過要注意的是,支持的https的網站基本都是CA機構頒發的全球信任的SSL證書。網頁鏈接
⑻ android 怎麼信任https
因為最近公司的open api伺服器訪問協議換成了https,所以 android 在使用okhttp 走https 訪問的時候遇到了證書信任的問題,
在這里把我走過的彎路記下來,一如既往的話不多說,上碼:
OkHttpClient sClient = new OkHttpClient();
// 設置超時時間
sClient.setConnectTimeout(8000, TimeUnit.MILLISECONDS);
sClient.setReadTimeout(8000, TimeUnit.MILLISECONDS);
// 注冊攔截器
sClient.interceptors().add(new BaseInterceptor(context));
第一種方式:
sClient.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
運行結果:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
11-26 11:17:57.264 17106-17268/com.dooioo.addressbook W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:410)
11-26 11:17:57.264 17106-17268/com.dooioo.addressbook W/System.err: at com.squareup.okhttp.Connection.connectTls(Connection.java:235)
11-26 11:17:57.264 17106-17268/com.dooioo.addressbook W/System.err: at com.squareup.okhttp.Connection.connectSocket(Connection.java:199)
11-26 11:17:57.264 17106-1726
⑼ 如何用阿里雲的API進行身份證識別
以下內容屬於引用復制,但可以回復你的問題:
准備工作:在libs下添加 alicloud-Android-apigateway-sdk-1.0.1.jar,commons-codec-1.10-1.jar
在build.gradle添加 compile'com.squareup.okhttp3:okhttp:3.4.1'
在onCreate,或者afterViews初始化API網關
private void initGatewaySdk() {
// 初始化API網關
ApiGatewayClient.init(getApplicationContext(), false);
}
調用拍照功能
private void getPhotoCard(){
final String status = Environment.getExternalStorageState();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, CAMERA_REQUEST_CODE);
}
if (status.equals(Environment.MEDIA_MOUNTED)) {
defaultPhotoAddress = PHOTO_DIR + "/" + getPhotoName();
PreferenceUtils.(CardActivity.this, Preferences.IMAGE_3, defaultPhotoAddress);
imageUri = Uri.fromFile(new File(defaultPhotoAddress));
Intent intentPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//action is capture
intentPhoto.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intentPhoto, CAMERA_REQUEST_CODE);
} else {
Toast.makeText(CardActivity.this, "沒有sd卡", Toast.LENGTH_SHORT).show();
}
}
可以對照片進行裁剪
private void cropImageUri(Uri desUri, int outputX, int outputY, int requestCode){
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(desUri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 5);
intent.putExtra("aspectY", 3);
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, desUri);
intent.putExtra("return-data", false);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true);
startActivityForResult(intent, requestCode);
}
用base64上傳照片
private void trygetCardNum() {
if (NetworkUtils.isConnectWithTip(this, "您未連接網路,無法獲取數據")) {
LoadingUtil.show(this);
String imgBase64 = "";
try {
defaultPhotoAddress = PreferenceUtils.getStringValueInPreferences(this, Preferences.IMAGE_3);
File file = new File(defaultPhotoAddress);
byte[] content = new byte[(int) file.length()];
FileInputStream finputstream = new FileInputStream(file);
finputstream.read(content);
finputstream.close();
imgBase64 = new String(Base64.encodeBase64(content));
// imgBase64 = Base64Img.Bitmap2StrByBase64(bitmap);
if(imgBase64!=null||!imgBase64.equals("")){
PreferenceUtils.(CardActivity.this, Preferences.IMAGE_3, null);
}
} catch (IOException e) {
e.printStackTrace();
return;
}
// 獲取服務
RpcService rpcService = ApiGatewayClient.getRpcService();
final ApiRequest apiRequest = new ApiRequest();
// 設置請求地址、Path及Method
apiRequest.setAddress("https://dm-51.data.aliyun.com");
apiRequest.setPath("/rest/160601/ocr/ocr_idcard.json");
apiRequest.setMethod(HttpMethod.POST);
// 按照文檔設置二進制形式Body,支持設置Query參數、Header參數、Form形式Body
apiRequest.setStringBody("{\"inputs\":[{\"image\":{\"dataType\":50,\"dataValue\":\""+imgBase64+"\"},\"configure\":{\"dataType\":50,\"dataValue\":\"{\\\"side\\\":\\\"face\\\"}\"}}]}");
// 設置支持自簽等形式的證書,如果服務端證書合法請勿設置該值,僅在開發測試或者非常規場景下設置。
apiRequest.setTrustServerCertificate(true);
// 設置超時
apiRequest.setTimeout(10000);
rpcService.call(apiRequest, new ApiResponseCallback() {
@Override
public void onSuccess(ApiResponse apiResponse) {
// 處理apiResponse
LoadingUtil.dismiss();
String s = apiResponse.getStringBody();
NumBean result = JSONObject.parseObject(s, NumBean.class);
String dataValue = result.getOutputs().get(0).getOutputValue().getDataValue();
DataValueBean dataValueBean = JSONObject.parseObject(dataValue, DataValueBean.class);
Number = dataValueBean.getNum();
name = dataValueBean.getName();
address = dataValueBean.getAddress();
birth = dataValueBean.getBirth();
nationality = dataValueBean.getNationality();
sex = dataValueBean.getSex();
if(dataValueBean.getError_msg()==null){
runOnUiThread(new Runnable() {
public void run() {
if(Number == null||Number.equals("")||name == null||name.equals("")||address == null||address.equals("")||birth == null||birth.equals("")||sex == null||sex.equals("")){
Toast.makeText(CardActivity.this, "掃描失敗,請重試", Toast.LENGTH_LONG).show();
}else {
//掃描成功
}
}
});
}else {
errString = dataValueBean.getError_msg();
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(CardActivity.this, "掃描失敗,請重試", Toast.LENGTH_LONG).show();
}
});
}
}
@Override
public void onException(ApiInvokeException e) {
// 處理異常
LoadingUtil.dismiss();
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(CardActivity.this, "掃描失敗,請重試", Toast.LENGTH_LONG).show();
}
});
}
});
}
}
附:
public class NumBean implements Serializable{
private List<OutputsBean> outputs;
public List<OutputsBean> getOutputs() {
return outputs;
}
public void setOutputs(List<OutputsBean> outputs) {
this.outputs = outputs;
}
public static class OutputsBean {
private String outputLabel;
private OutputMultiBean outputMulti;
private OutputValueBean outputValue;
public String getOutputLabel() {
return outputLabel;
}
public void setOutputLabel(String outputLabel) {
this.outputLabel = outputLabel;
}
public OutputMultiBean getOutputMulti() {
return outputMulti;
}
public void setOutputMulti(OutputMultiBean outputMulti) {
this.outputMulti = outputMulti;
}
public OutputValueBean getOutputValue() {
return outputValue;
}
public void setOutputValue(OutputValueBean outputValue) {
this.outputValue = outputValue;
}
public static class OutputMultiBean {
}
public static class OutputValueBean {
private int dataType;
private String dataValue;
public int getDataType() {
return dataType;
}
public void setDataType(int dataType) {
this.dataType = dataType;
}
public String getDataValue() {
return dataValue;
}
public void setDataValue(String dataValue) {
this.dataValue = dataValue;
}
}
}
}
public class DataValueBean implements Serializable{
private String address;
private String birth;
private String config_str;
private String error_msg;
private String name;
private String nationality;
private String num;
private String request_id;
private String sex;
private boolean success;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public String getConfig_str() {
return config_str;
}
public void setConfig_str(String config_str) {
this.config_str = config_str;
}
public String getError_msg() {
return error_msg;
}
public void setError_msg(String error_msg) {
this.error_msg = error_msg;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNationality() {
return nationality;
}
public void setNationality(String nationality) {
this.nationality = nationality;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getRequest_id() {
return request_id;
}
public void setRequest_id(String request_id) {
this.request_id = request_id;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
}
在AndroidManifest.xml下添加
<meta-data android:name="com.alibaba.apigateway.appKey" android:value="" />
<meta-data android:name="com.alibaba.apigateway.appSecret" android:value="" />