protected def prepareReq()

in linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/AbstractHttpClient.scala [286:433]


  protected def prepareReq(requestAction: HttpAction): HttpRequestBase = {

    val realURL = getRequestUrl(requestAction)
    tryLogin(requestAction, realURL, false)

    val request = requestAction match {
      case delete: DeleteAction =>
        val builder = new URIBuilder(realURL)
        if (!delete.getParameters.isEmpty) {
          delete.getParameters.asScala.foreach { case (k, v) =>
            if (k != null && v != null) builder.addParameter(k.toString, v.toString)
          }
        }
        val httpDelete = new HttpDelete(builder.build())
        if (requestAction.getHeaders.asScala.nonEmpty) {
          requestAction.getHeaders.asScala.foreach { case (k, v) =>
            if (k != null && v != null) httpDelete.addHeader(k.toString, v.toString)
          }
        }
        httpDelete
      case put: PutAction =>
        val httpPut = new HttpPut(realURL)
        if (put.getParameters.asScala.nonEmpty || put.getFormParams.asScala.nonEmpty) {
          val nameValuePairs = new util.ArrayList[NameValuePair]
          if (put.getParameters.asScala.nonEmpty) {
            put.getParameters.asScala.foreach { case (k, v) =>
              if (v != null) nameValuePairs.add(new BasicNameValuePair(k, v.toString))
            }
          }
          if (put.getFormParams.asScala.nonEmpty) {
            put.getFormParams.asScala.foreach { case (k, v) =>
              if (v != null) nameValuePairs.add(new BasicNameValuePair(k, v.toString))
            }
          }
          httpPut.setEntity(new UrlEncodedFormEntity(nameValuePairs, Charset.defaultCharset))
        }

        if (StringUtils.isNotBlank(put.getRequestPayload)) {
          val stringEntity = new StringEntity(put.getRequestPayload, "UTF-8")
          stringEntity.setContentEncoding(Configuration.BDP_ENCODING.getValue)
          stringEntity.setContentType("application/json")
          httpPut.setEntity(stringEntity)
        }

        if (requestAction.getHeaders.asScala.nonEmpty) {
          requestAction.getHeaders.asScala.foreach { case (k, v) =>
            if (k != null && v != null) httpPut.addHeader(k.toString, v.toString)
          }
        }
        httpPut
      case upload: UploadAction =>
        val httpPost = new HttpPost(realURL)
        val builder = MultipartEntityBuilder.create()
        if (upload.inputStreams != null) {
          upload.inputStreams.asScala.foreach { case (k, v) =>
            builder.addBinaryBody(k, v, ContentType.create("multipart/form-data"), k)
          }
        }
        upload.binaryBodies.asScala.foreach(binaryBody =>
          builder.addBinaryBody(
            binaryBody.parameterName,
            binaryBody.inputStream,
            binaryBody.contentType,
            binaryBody.fileName
          )
        )
        upload match {
          case get: GetAction =>
            get.getParameters.asScala.retain((k, v) => v != null && k != null).foreach {
              case (k, v) =>
                if (k != null && v != null) builder.addTextBody(k, v.toString)
            }
          case _ =>
        }
        upload match {
          case get: GetAction =>
            get.getHeaders.asScala.retain((k, v) => v != null && k != null).foreach { case (k, v) =>
              if (k != null && v != null) httpPost.addHeader(k, v)
            }
          case _ =>
        }
        val httpEntity = builder.build()
        httpPost.setEntity(httpEntity)
        httpPost
      case post: POSTAction =>
        val httpPost = new HttpPost(realURL)
        if (post.getParameters.asScala.nonEmpty || post.getFormParams.asScala.nonEmpty) {
          val nvps = new util.ArrayList[NameValuePair]
          if (post.getParameters.asScala.nonEmpty) {
            post.getParameters.asScala.foreach { case (k, v) =>
              if (v != null) nvps.add(new BasicNameValuePair(k, v.toString))
            }
            httpPost.setEntity(new UrlEncodedFormEntity(nvps, Charset.defaultCharset))
          } else if (post.getFormParams.asScala.nonEmpty) {
            post.getFormParams.asScala.foreach { case (k, v) =>
              if (v != null) nvps.add(new BasicNameValuePair(k, v.toString))
            }
            val entity: HttpEntity = EntityBuilder
              .create()
              . /* setContentEncoding("UTF-8"). */
              setContentType(ContentType.create("application/x-www-form-urlencoded", Consts.UTF_8))
              .setParameters(nvps)
              .build();
            httpPost.setEntity(entity)
          }

        } else if (StringUtils.isNotBlank(post.getRequestPayload)) {
          val stringEntity = new StringEntity(post.getRequestPayload, "UTF-8")
          stringEntity.setContentEncoding(Configuration.BDP_ENCODING.getValue)
          stringEntity.setContentType("application/json")
          httpPost.setEntity(stringEntity)
        }

        if (requestAction.getHeaders.asScala.nonEmpty) {
          requestAction.getHeaders.asScala.foreach { case (k, v) =>
            if (k != null && v != null) httpPost.addHeader(k.toString, v.toString)
          }
        }
        httpPost
      case get: GetAction =>
        val builder = new URIBuilder(realURL)
        if (!get.getParameters.isEmpty) {
          get.getParameters.asScala.foreach { case (k, v) =>
            if (k != null && v != null) builder.addParameter(k.toString, v.toString)
          }
        }
        val httpGet = new HttpGet(builder.build())
        if (requestAction.getHeaders.asScala.nonEmpty) {
          requestAction.getHeaders.asScala.foreach { case (k, v) =>
            if (k != null && v != null) httpGet.addHeader(k.toString, v.toString)
          }
        }
        httpGet
      case _ =>
        val httpost = new HttpPost(realURL)
        val stringEntity = new StringEntity(requestAction.getRequestBody, "UTF-8")
        stringEntity.setContentEncoding(Configuration.BDP_ENCODING.getValue)
        stringEntity.setContentType("application/json")
        httpost.setEntity(stringEntity)
        if (requestAction.getHeaders.asScala.nonEmpty) {
          requestAction.getHeaders.asScala.foreach { case (k, v) =>
            if (k != null && v != null) httpost.addHeader(k.toString, v.toString)
          }
        }
        httpost
    }
    request
  }