它的一些優點如下:
1.後台線程:所有請求都像本地應用程序一樣在後台線程中完成。
2.HTTP代碼401的處理:在未經授權訪問服務器時,使用基於JavaScript的HTTP調用未正確處理該錯誤代碼401,但未正確訪問服務器。
3.SSL固定:固定用於提高服務的安全性。它用於創建進行通信的安全身份。
在這裡,我們將blank通過運行以下命令使用模板創建一個新的Ionic應用程序:
ionic start ionicHTTP blank
cd ionicHTTP
安裝本機HTTP插件
$ ionic cordova plugin add cordova-plugin-advanced-http $ npm install @ionic-native/http
導入應用程序模塊
要在應用程序中使用HTTP方法,請打開app.module.ts文件以導入HTTP類,然後添加provider數組,如下所示:
//app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { HTTP } from '@ionic-native/http/ngx';
@NgModule({
declarations: [AppComponent],
entryComponents: [],
imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule],
providers: [
StatusBar,
SplashScreen,
HTTP,
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
],
bootstrap: [AppComponent]
})
export class AppModule {}
要在組件中使用HTTP Native插件,請首先導入HTTP類,然後添加constructor來使用其方法:
//home.page.ts
import { Component } from '@angular/core';
import { HTTP } from '@ionic-native/http/ngx';
@Component({
selector: 'app-home',
templateUrl: 'home.page.html',
styleUrls: ['home.page.scss'],
})
export class HomePage {
constructor(
private http: HTTP
) {
...
...
}
此本機插件的 HTTP 類提供了一些同步和異步方法:
異步功能
這種功能的類別包括 sendRequest 將方法,如 post,get,put,patch,delete,head,uploadFile和 downloadFile。
它們與前兩個參數採用URL和對options像一起使用,後兩個參數與success和error回調一起使用。
檢查此常見格式以進行 sendRequest HTTP 調用:
this.http.sendRequest('https://google.com/',
{
method: 'post',
data: { id: 12, message: 'test' },
headers: { Authorization: 'OAuth2: token' },
timeout: 5000
}
)
.then(response => {
// prints 200
console.log(response.status);
})
.catch(response => {
// prints 403
console.log(response.status);
// prints Permission denied
console.log(response.error);
});
成功回調
then()方法返回具有4個屬性的對象:
status是HTTP響應代碼,為數字值。
data是來自服務器的字符串響應。
url是任何重定向後以字符串形式獲得的最終URL。
標頭是帶有標頭的對象。
{
status: 200,
data: '{"id": 12, "message": "test"}',
url: 'http://example.net/rest'
headers: {
'content-length': '247'
}
}
失敗回調
catch()方法返回具有4個屬性的對象:
status是HTTP響應代碼,是一個數字值。
錯誤是服務器以字符串形式返回的錯誤響應。
url是任何重定向後以字符串形式獲得的最終URL。
標頭是帶有標頭的對象。
{
status: 403,
error: 'Permission denied',
url: 'http://example.net/noperm'
headers: {
'content-length': '247'
}
}
我們還可以使用特定的請求類型:
請求類型POST,GET,PUT,PATCH,DELETE和HEAD佔用3個參數對象:
網址:URL來發送請求
參數:參數與請求發送
標題:標題來設置此要求
例如,下面是使用POST來自API端點的JSON數據響應的方法:
this.http.post(
'https://google.com/', //URL
{id: 12, message: 'test'}, //Data
{ Authorization: 'OAuth2: token' } // Headers
)
.then(response => {
// prints 200
console.log(response.status);
try {
response.data = JSON.parse(response.data);
// prints test
console.log(response.data.message);
} catch(e) {
console.error('JSON parsing error');
}
})
.catch(response => {
// prints 403
console.log(response.status);
// prints Permission denied
console.log(response.error);
});
上傳文件
為了將文件保存在服務器上,我們使用uploadFile帶有4個參數的方法:
網址:URL來發送請求
體:該請求的主體
頭:標頭為此請求設置
文件路徑:要上傳的文件的本地路徑
名:參數的名稱傳遞下去作為文件
this.http.uploadFile(
'https://google.com/',
{ id: '12', message: 'test' },
{ Authorization: 'OAuth2: token' },
'file:///somepicture.jpg',
'myPictureName'
)
.then(response => {
// prints 200
console.log(response.status);
})
.catch(response => {
// prints 403
console.log(response.status);
// prints Permission denied
console.log(response.error);
});
下載文件
要從服務器下載文件,有一種downloadFile方法需要四個參數:
url:將請求發送到
正文的url :請求
標頭的正文:為此請求設置的標頭
filePath:下載文件的路徑,包括文件名。
this.http.downloadFile(
'https://google.com/',
{ id: '12', message: 'test' },
{ Authorization: 'OAuth2: token' },
'file:///somepicture.jpg'
)
.then(response => {
// prints 200
console.log(response.status);
})
.catch(response => {
// prints 403
console.log(response.status);
// prints Permission denied
console.log(response.error);
});
Ionic的Native HTTP插件還提供了同步功能,用於獲取身份驗證標頭,設置或獲取Cookie以及設置標頭。您可以在此處查看更多信息。
沒有留言:
張貼留言