
# 通过APP认证的方式访问在线服务
部署在线服务支持开启APP认证，即ModelArts会为服务注册一个支持APP认证的接口，为此接口配置APP授权后，用户可以使用授权应用的AppKey+AppSecret或AppCode调用该接口。
针对在线服务的APP认证，具体操作流程如下。
1. [开启支持APP认证功能]：开启支持APP认证功能，选择已有APP应用或者创建新的APP应用。
2. [在线服务授权管理]：对创建的APP应用进行管理，包括查看、重置或删除应用，绑定或解绑应用对应的在线服务，获取"AppKey/AppSecret"或"AppCode"。
3. [APP认证鉴权]：调用支持APP认证的接口需要进行认证鉴权，支持两种鉴权方式（AppKey+AppSecret或AppCode），您可以选择其中一种进行认证鉴权。
4. 发送预测请求：
   - [方式一：使用Python语言通过AppKey+AppSecret认证鉴权方式发送预测请求]
   
   - [方式二：使用Java语言通过AppKey+AppSecret认证鉴权方式发送预测请求]
   
   - [方式三：使用Python语言通过AppCode认证鉴权方式发送预测请求]
   
   - [方式四：使用Java语言通过AppCode认证鉴权方式发送预测请求]
    
#### 约束限制
调用API访问在线服务时，对预测请求体大小和预测时间有限制：
- 请求体的大小不超过12MB，超过后请求会被拦截。
- 因APIG（API网关）限制，平台每次请求预测的时间不超过40秒。
 
#### 前提条件
- 数据已完成准备：已在ModelArts中创建状态"正常"可用的模型。
- 由于在线运行需消耗资源，确保账户未欠费。
- 已获取预测文件的本地路径，可使用绝对路径（如Windows格式"D:/test.png"，Linux格式"/opt/data/test.png"）或相对路径（如"./test.png"）。
 
 #### 开启支持APP认证功能
在部署为在线服务时，您可以开启支持APP认证功能。或者针对已部署完成的在线服务，您可以修改服务，开启支持APP认证功能。
1. 登录[ModelArts管理控制台](https://console.huaweicloud.com/modelarts/)，在左侧菜单栏中选择"模型部署 \> 在线服务"，进入在线服务管理页面。
2. 开启支持APP认证功能。
   - 在部署为在线服务时，即"部署"页面，填写部署服务相关参数时，开启支持APP认证功能。
   
   - 针对已部署完成的在线服务，进入在线服务管理页面，单击目标服务名称"操作"列的"修改"按钮，进入修改服务页面开启支持APP认证功能。
     图1部署页面开启支持APP认证功能   
     ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001952663678.png "点击放大") 
    
3. 选择APP授权配置。从下拉列表中选择您需要配置的APP应用，如果没有可选项，您可以通过如下方式创建应用。
   - 单击右侧"创建应用"，填写应用名称和描述之后单击"确定"完成创建。其中应用名称默认以"app_"开头，您也可以自行修改。
   
   - 进入"模型部署 \> 在线服务"页面，单击"授权管理"，进入"在线服务授权管理"页面，选择"创建应用"，详情请参见[在线服务授权管理]。
    
4. 开启支持APP认证功能后，将支持APP认证的服务授权给应用，用户可以使用创建的"AppKey/AppSecret"或"AppCode"调用服务的支持APP认证的接口。 APP认证的服务授权给应用后，需要1-2分钟生效。
   
 
 #### 在线服务授权管理
如果您需要使用支持APP认证功能，建议您在部署在线服务之前进行授权管理操作完成应用创建。进入"模型部署 \> 在线服务"页面，单击"授权管理"，进入"在线服务授权管理"对话框。在此页面您可以实现应用的创建和管理，包括查询明文、重置或删除应用，解绑应用对应的在线服务，获取"AppKey/AppSecret"或"AppCode"。
图2在线服务授权管理   
![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001986182957.png "点击放大")
- **创建应用**
  选择"创建应用"，填写应用名称和描述之后单击"确定"完成创建。其中应用名称默认以"app_"开头，您也可以自行修改。
  
- **查看、重置或删除应用**
  您可以单击目标应用名称操作列的按钮完成应用的查询明文、重置或删除。创建完成后自动生成"AppKey/AppSecret"以供您后续调取接口进行APP鉴权使用。
  图3查询明文、重置或删除   
  ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001986182953.png "点击放大") 
- **解绑服务**
  您可以单击目标应用名称前方的![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001986023081.png)，在下拉列表中展示绑定的服务列表，即该应用对应的在线服务列表。单击操作列的"解绑"取消绑定，将不再支持调用该接口。
  
- **获取AppKey/AppSecret或AppCode**
  调用接口需要进行APP鉴权，在创建APP应用时自动生成"AppKey/AppSecret"，您可以在"在线服务授权管理"对话框中单击APP应用操作列的![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001986023085.png)查看完整的**AppSecret** 。单击应用名称前方的![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001952663670.png)展开下拉列表，通过单击"添加AppCode"自动生成"AppCode"，您可以单击操作列的![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001952663686.png)查看完整的**AppCode**。
  图4添加AppCode   
  ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001952663674.png "点击放大") 
 
 #### APP认证鉴权
当支持APP认证功能的在线服务运行成功处于"运行中"状态，就可以对服务进行调用 。在调用之前您需要进行APP认证鉴权。
当使用APP认证，且开启了简易认证模式，API请求既可以选择使用AppKey和AppSecret做签名和校验，也可以选择使用AppCode进行简易认证（ModelArts默认启用简易认证）。推荐使用AppKey/AppSecret认证，其安全性比AppCode认证要高。
- **AppKey/AppSecret认证** ：通过AppKey与AppSecret对请求进行加密签名，可标识发送方并防止请求被修改。使用AppKey/AppSecret认证时，您需要使用专门的签名SDK对请求进行签名。
  - AppKey：APP访问密钥ID。与私有访问密钥关联的唯一标识符；访问密钥ID和私有访问密钥一起使用，对请求进行加密签名。
  
  - AppSecret：APP私有访问密钥，即与访问密钥ID结合使用的密钥，对请求进行加密签名，可标识发送方，并防止请求被修改。
  
  
  AppKey进行简易认证时，即在调用API的时候，在HTTP请求头部消息增加一个参数"apikey"（参数值为"AppKey"），实现快速认证。
  
- **AppCode认证** ：通过AppCode认证通用请求。
  AppCode认证就是在调用API的时候，在HTTP请求头部消息增加一个参数"X-Apig-AppCode"（参数值为"AppCode"），而不需要对请求内容签名，API网关也仅校验AppCode，不校验请求签名，从而实现快速响应。
  
您可以在服务详情页的"调用指南"页签（如[图5]）获取API接口公网地址（对应下文示例中的在线服务的调用地址url）和AppKey/AppSecret（对应下文示例中的app_key、app_secret）和AppCode（对应下文示例中的app_code）。请注意使用图中第二行用于APP认证方式的API接口公网地址。
以下情况下需要对API接口公网地址进行拼接修改：
- 当模型配置文件中apis定义了路径，调用地址后需拼接自定义路径。如："{在线服务的调用地址}/predictions/poetry"。 如果是部署SD WebUI推理服务，调用地址后需添加**"/"**。如："https://8e\*\*\*\*\*\*5fe.apig.\*\*\*\*\*\*.huaweicloudexampleapis.com/v1/infers/f2682\*\*\*\*\*\*f42/"。
  
图5获取APP认证鉴权相关信息   
![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001986182941.png "点击放大")
 #### 方式一：使用Python语言通过AppKey+AppSecret认证鉴权方式发送预测请求
1. 下载Python SDK并在开发工具中完成SDK配置。具体操作请参见[在Python环境中集成API请求签名的SDK](https://support.huaweicloud.com/devg-apisign/api-sign-sdk-python.html)。
2. 创建请求体，进行预测请求。
   - **输入为文件格式**
     ```
     # coding=utf-8
     import requests
     import os
     from apig_sdk import signer
     if __name__ == '__main__':
         # Config url, ak, sk and file path.
         # API接口公网地址，例如"https://8e******5fe.apig.******.huaweicloudapis.com/v1/infers/f2682******f42",对应图5中的在线服务的调用地址url
         url = "在线服务的调用地址"
         # 认证用的app_key和app_secret硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
         # 本示例以app_key和app_secret保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_KEY和HUAWEICLOUD_APP_SECRET。
         app_key = os.environ["HUAWEICLOUD_APP_KEY"]
         app_secret= os.environ["HUAWEICLOUD_APP_SECRET"]
         file_path = "预测文件的本地路径"
         # Create request, set method, url, headers and body.
         method = 'POST'
         headers = {"x-sdk-content-sha256": "UNSIGNED-PAYLOAD"}
         request = signer.HttpRequest(method, url, headers)
         # Create sign, set the AK/SK to sign and authenticate the request.
         sig = signer.Signer()
         sig.Key = app_key
         sig.Secret = app_secret
         sig.Sign(request)
         # Send request
         files = {'images': open(file_path, 'rb')}
         resp = requests.request(request.method, request.scheme + "://" + request.host + request.uri, headers=request.headers, files=files)
         # Print result
         print(resp.status_code)
         print(resp.text)
     ```
     "files"参数的请求体样式为"files={"请求参数":("文件路径"，文件内容，"文件类型")}"，参数填写可以参考[表1]。
      表1files参数说明 
     | 参数   | 是否必填 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
     |:---|:---|:---|
     | 请求参数 | 是    | 在线服务输入参数名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     | 文件路径 | 否    | 上传文件的路径。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
     | 文件内容 | 是    | 上传文件的内容。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
     | 文件类型 | 否    | 上传文件类型。当前支持以下类型： - txt类型：text/plain  - jpg/jpeg类型：image/jpeg  - png类型：image/png   |
        
     
   
   - **输入为文本格式（json类型）**
     读取本地预测文件并进行base64编码的请求体示例如下：
     ```
     # coding=utf-8
     import base64
     import json
     import os
     import requests
     from apig_sdk import signer
     if __name__ == '__main__':
         # Config url, ak, sk and file path.
         # API接口公网地址，例如"https://8e******5fe.apig.******.huaweicloudapis.com/v1/infers/f2682******f42"
         url = "在线服务的调用地址"
         # 认证用的app_key和app_secret硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
         # 本示例以app_key和app_secret保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_KEY和HUAWEICLOUD_APP_SECRET。
         app_key = os.environ["HUAWEICLOUD_APP_KEY"]
         app_secret= os.environ["HUAWEICLOUD_APP_SECRET"]
         file_path = "预测文件的本地路径"
         with open(file_path, "rb") as file:
             base64_data = base64.b64encode(file.read()).decode("utf-8")
         # Create request, set method, url, headers and body.
         method = 'POST'
         headers = {
             'Content-Type': 'application/json'
         }
         body = {
             'image': base64_data
         }
         request = signer.HttpRequest(method, url, headers, json.dumps(body))
         # Create sign, set the AppKey&AppSecret to sign and authenticate the request.
         sig = signer.Signer()
         sig.Key = app_key
         sig.Secret = app_secret
         sig.Sign(request)
         # Send request
         resp = requests.request(request.method, request.scheme + "://" + request.host + request.uri, headers=request.headers, data=request.body)
         # Print result
         print(resp.status_code)
         print(resp.text)
     ```
     "body"中的参数名由在线服务的输入参数决定，需要和"类型"为"string"的输入参数"名称"保持一致。此处以"image"为例。"body"中的base64_data值为string类型。
     
    
 
 #### 方式二：使用Java语言通过AppKey+AppSecret认证鉴权方式发送预测请求
1. 下载Java SDK并在开发工具中完成SDK配置。具体操作请参见[在Java环境中集成API请求签名的SDK](https://support.huaweicloud.com/devg-apisign/api-sign-sdk-java.html)。
2. 创建Java类，进行预测请求。 由于在APIG的Java SDK中，"request.setBody()"只支持String类型，所以只支持输入为文本格式的预测请求。
   此处以json格式为例介绍读取本地预测文件并进行base64编码的请求体：
   ```
   // Package name of the demo.
   package com.apig.sdk.demo;
   import com.cloud.apigateway.sdk.utils.Client;
   import com.cloud.apigateway.sdk.utils.Request;
   import org.apache.http.HttpHeaders;
   import org.apache.http.client.methods.CloseableHttpResponse;
   import org.apache.http.client.methods.HttpPost;
   import org.apache.http.client.methods.HttpRequestBase;
   import org.apache.http.impl.client.HttpClients;
   import org.apache.http.util.EntityUtils;
   public class MyAkSkTest {
       public static void main(String[] args) {
          # API接口公网地址，例如"https://8e******5fe.apig.******.huaweicloudapis.com/v1/infers/f2682******f42"
           String url = "在线服务的调用地址";
          // 认证用的appKey和appSecret硬编码到代码中或者明文存储都有很大的安全风险，建议在配置文件或者环境变量中密文存放，使用时解密，确保安全；
          // 本示例以appKey和appSecret保存在环境变量中来实现身份验证为例，运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_KEY和HUAWEICLOUD_APP_SECRET。 
           String appKey = System.getenv("HUAWEICLOUD_APP_KEY");
          String appSecret = System.getenv("HUAWEICLOUD_APP_SECRET");
           String body = "{}";
           try {
               // Create request
               Request request = new Request();
               // Set the AK/AppSecret to sign and authenticate the request.
               request.setKey(appKey);
               request.setSecret(appSecret);
               // Specify a request method, such as GET, PUT, POST, DELETE, HEAD, and PATCH.
               request.setMethod(HttpPost.METHOD_NAME);
               // Add header parameters
               request.addHeader(HttpHeaders.CONTENT_TYPE, "application/json");
               // Set a request URL in the format of https://{Endpoint}/{URI}.
               request.setUrl(url);
               // Special characters, such as the double quotation mark ("), contained in the body must be escaped.
               request.setBody(body);
               // Sign the request.
               HttpRequestBase signedRequest = Client.sign(request);
               // Send request.
               CloseableHttpResponse response = HttpClients.createDefault().execute(signedRequest);
               // Print result
               System.out.println(response.getStatusLine().getStatusCode());
               System.out.println(EntityUtils.toString(response.getEntity()));
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
   }
   ```
   "body"由具体文本格式决定，此处以json为例。
   
 
 #### 方式三：使用Python语言通过AppCode认证鉴权方式发送预测请求
1. 下载Python SDK并在开发工具中完成SDK配置。具体操作请参见[在Python环境中集成API请求签名的SDK](https://support.huaweicloud.com/devg-apisign/api-sign-sdk-python.html)。
2. 创建请求体，进行预测请求。
   - **输入为文件格式**
     ```
     # coding=utf-8
     import requests
     import os
     if __name__ == '__main__':
         # Config url, app code and file path.
         # API接口公网地址，例如"https://8e******5fe.apig.******.huaweicloudapis.com/v1/infers/f2682******f42"
         url = "在线服务的调用地址"
         # 认证用的app_code硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
         # 本示例以app_code保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_CODE。
         app_code = os.environ["HUAWEICLOUD_APP_CODE"]
         file_path = "预测文件的本地路径"
         # Send request.
         headers = {
             'X-Apig-AppCode': app_code
         }
         files = {
             'images': open(file_path, 'rb')
         }
         resp = requests.post(url, headers=headers, files=files)
         # Print result
         print(resp.status_code)
         print(resp.text)
     ```
     "files"中的参数名由在线服务的输入参数决定，需要和"类型"为"file"的输入参数"名称"保持一致。此处以"images"为例。
     
   
   - **输入为文本格式（json类型）**
     读取本地预测文件并进行base64编码的请求体示例如下：
     ```
     # coding=utf-8
     import base64
     import requests
     import os
     if __name__ == '__main__':
         # Config url, app code and request body.
         # API接口公网地址，例如"https://8e******5fe.apig.******.huaweicloudapis.com/v1/infers/f2682******f42"
         url = "在线服务的调用地址"
         # 认证用的app_code硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
         # 本示例以app_code保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_CODE。
         app_code = os.environ["HUAWEICLOUD_APP_CODE"]
         file_path = "预测文件的本地路径"
         with open(file_path, "rb") as file:
             base64_data = base64.b64encode(file.read()).decode("utf-8")
         # Send request
         headers = {
             'Content-Type': 'application/json',
             'X-Apig-AppCode': app_code
         }
         body = {
             'image': base64_data
         }
         resp = requests.post(url, headers=headers, json=body)
         # Print result
         print(resp.status_code)
         print(resp.text)
     ```
     "body"中的参数名由在线服务的输入参数决定，需要和"类型"为"string"的输入参数"名称"保持一致。此处以"image"为例。"body"中的base64_data值为string类型。
     
    
 
 #### 方式四：使用Java语言通过AppCode认证鉴权方式发送预测请求
1. 下载Java SDK并在开发工具中完成SDK配置。具体操作请参见[在Java环境中集成API请求签名的SDK](https://support.huaweicloud.com/devg-apisign/api-sign-sdk-java.html)。
2. （可选）当预测请求的输入为文件格式时，Java工程依赖httpmime模块。
   1. 在工程"libs"中增加httpmime-x.x.x.jar。完整的Java依赖库如[图6]所示。
      httpmime-x.x.x.jar建议使用4.5及以上版本，下载地址：<https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime>。
      图6Java依赖库   
      ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001986023053.png) 
   
   2. httpmime-x.x.x.jar添加完成后，在Java工程的.classpath文件中，补充httpmime信息，如下所示：
      ```
      <?xml version="1.0" encoding="UTF-8"?>
      <classpath>
      <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
      <classpathentry kind="src" path="src"/>
      <classpathentry kind="lib" path="libs/commons-codec-1.11.jar"/>
      <classpathentry kind="lib" path="libs/commons-logging-1.2.jar"/>
      <classpathentry kind="lib" path="libs/httpclient-4.5.13.jar"/>
      <classpathentry kind="lib" path="libs/httpcore-4.4.13.jar"/>
      <classpathentry kind="lib" path="libs/httpmime-x.x.x.jar"/>
      <classpathentry kind="lib" path="libs/java-sdk-core-3.1.2.jar"/>
      <classpathentry kind="lib" path="libs/okhttp-3.14.9.jar"/>
      <classpathentry kind="lib" path="libs/okio-1.17.2.jar"/>
      <classpathentry kind="output" path="bin"/>
      </classpath>
      ```
      
    
3. 创建Java类，进行预测请求。
   - **输入为文件格式**
     Java的请求体示例如下：
     ```
     // Package name of the demo.
     package com.apig.sdk.demo;
     import org.apache.http.Consts;
     import org.apache.http.HttpEntity;
     import org.apache.http.client.methods.CloseableHttpResponse;
     import org.apache.http.client.methods.HttpPost;
     import org.apache.http.entity.ContentType;
     import org.apache.http.entity.mime.MultipartEntityBuilder;
     import org.apache.http.impl.client.HttpClients;
     import org.apache.http.util.EntityUtils;
     import java.io.File;
     public class MyAppCodeFile {
         public static void main(String[] args) {
            # API接口公网地址，例如"https://8e******5fe.apig.******.huaweicloudapis.com/v1/infers/f2682******f42"
             String url = "在线服务的调用地址";
            // 认证用的appCode硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
            // 本示例以appCode保存在环境变量中来实现身份验证为例，运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_CODE。 
             String appCode = System.getenv("HUAWEICLOUD_APP_CODE");
             String filePath = "预测文件的本地路径";
             try {
                 // Create post
                 HttpPost httpPost = new HttpPost(url);
                 // Add header parameters
                 httpPost.setHeader("X-Apig-AppCode", appCode);
                 // Special characters, such as the double quotation mark ("), contained in the body must be escaped.
                 File file = new File(filePath);
                 HttpEntity entity = MultipartEntityBuilder.create().addBinaryBody("images", file).setContentType(ContentType.MULTIPART_FORM_DATA).setCharset(Consts.UTF_8).build();
                 httpPost.setEntity(entity);
                 // Send post
                 CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
                 // Print result
                 System.out.println(response.getStatusLine().getStatusCode());
                 System.out.println(EntityUtils.toString(response.getEntity()));
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
     }
     ```
     "addBinaryBody"中的参数名由在线服务的输入参数决定，需要和"类型"为"file"的输入参数"名称"保持一致。此处以"images"为例。
     
   
   - **输入为文本格式（json类型）**
     读取本地预测文件并进行base64编码的请求体示例如下：
     ```
     // Package name of the demo.
     package com.apig.sdk.demo;
     import org.apache.http.HttpHeaders;
     import org.apache.http.client.methods.CloseableHttpResponse;
     import org.apache.http.client.methods.HttpPost;
     import org.apache.http.entity.StringEntity;
     import org.apache.http.impl.client.HttpClients;
     import org.apache.http.util.EntityUtils;
     public class MyAppCodeTest {
         public static void main(String[] args) {
            # API接口公网地址，例如"https://8e******5fe.apig.******.huaweicloudapis.com/v1/infers/f2682******f42"
             String url = "在线服务的调用地址";
            // 认证用的appCode硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
            // 本示例以appCode保存在环境变量中来实现身份验证为例，运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_CODE。 
             String appCode = System.getenv("HUAWEICLOUD_APP_CODE");
             String body = "{}";
             try {
                 // Create post
                 HttpPost httpPost = new HttpPost(url);
                 // Add header parameters
                 httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
                 httpPost.setHeader("X-Apig-AppCode", appCode);
                 // Special characters, such as the double quotation mark ("), contained in the body must be escaped.
                 httpPost.setEntity(new StringEntity(body));
                 // Send post
                 CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
                 // Print result
                 System.out.println(response.getStatusLine().getStatusCode());
                 System.out.println(EntityUtils.toString(response.getEntity()));
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
     }
     ```
     "body"由具体文本格式决定，此处以json为例。
     
    
 
