加强HTTP-避免URL编码

时间:2019-04-02 02:59:03

标签: rest http kotlin parse-platform

使用改造,我可以获取并避免如下所示的URL编码:

async getData(key) {
      let { getData } = this.props;
      let res = null;
      if (getData.code === "ON") {
          try{
            res = await Codeapi(getData._id[0]);
          } catch(e) {
            console.log(e);
          }
      }
      return (
          <Dialog
              key={key}
              side="left"
              onImageClick={this.handleClick}>
              <ReactSlick res/>
              </Dialog>
      );
    }

在加油此GET请求中:

@GET("classes/Tournaments")
    fun searchTournament(@Query(value = "where", encoded = false) query: String): Call<List<Tournament>>

生成此URL:fun searchTournament(name: String): Any { val (request, _, result) = Fuel.get(baseUrl.plus("/classes/tournaments"), listOf("where" to mapOf("name" to name))).responseString() val (payload, error) = result println(request.url) return "" } ,从而导致错误。

我在文档中找不到关于避免编码的明确信息。这可能吗?

我的应用是Kotlin控制台应用(没有Android)

当我将此查询发送到服务器时,它会返回Http 500-内部服务器错误(没有更多详细信息)。我认为它不了解查询。

https://parseapi.back4app.com/classes/tournaments?where=%7Bname%3DBrasileir%C3%A3o+2019%7D

服务器是ParseServer(Back4App)的实例,我无法在那里解码查询。

2 个答案:

答案 0 :(得分:1)

这是有关使用rest api的清晰说明。

https://docs.parseplatform.org/rest/guide/#query-constraints

键不正确的值/格式。您必须使用双引号和':',而不是直接使用带有'='的查询键。

因此,您的编码URL应该是这样的: https://parseapi.back4app.com/classes/tournaments?where=%7B%22name%22%3A%22Brasileir%C3%A3o%2B2019%22%7D

答案 1 :(得分:0)

实际上,这不是编码问题。

我将我的kotlin代码更改为以下代码段,将listOf内的Map替换为纯字符串,并且可以正常工作。

val (request, _, result)
                = Fuel.get(baseUrl.plus("/classes/Tournaments"), listOf("where" to "{\"name\": \"$name\"}")).responseString()
        val (payload, error) = result