【问题标题】:OKHttp3 Non-Encoded URLOKHttp3 非编码 URL
【发布时间】:2017-12-28 07:24:01
【问题描述】:

当我如下构建请求时:

new Request.Builder()
            .url("https://bla.com/entry/1411641")
            .build();

1411641 变为 https://bla.com/entry/%EF%BB%BF1411641

有没有办法在不编码 URL 的情况下构建请求?

【问题讨论】:

  • 您确定原始网址中没有此字符吗? OKHttp 不会添加这样的东西。

标签: java okhttp3


【解决方案1】:

您的输入中有一个 Unicode 字符“零宽度无间隔”(U+FEFF),编辑您复制的文本并将其删除。

http://www.fileformat.info/info/unicode/char/feff/index.htm

UTF-8 (十六进制) 0xEF 0xBB 0xBF (efbbbf)

【讨论】:

    【解决方案2】:

    使用这个:

    new Request.Builder()
                .baseUrl("https://bla.com")
                .build();
    

    在界面中

    @GET("/entry/{id}/")
    Call<ResponseBody> getData(@Path("id") String yourId);
    

    【讨论】:

      【解决方案3】:

      使用这个:

      final Request request = new Request.Builder()
      .url(HttpUrl.parse("https://bla.com").newBuilder().addPathSegment("entry").addPathSegment("1411641").build())
                      .post(formBody)
                      .build();
      OkHttpClient client = new OkHttpClient();
      client.newCall(request).enqueue(new Callback() {
                  @Override
                  public void onFailure(@NonNull Call call, @NonNull IOException e) {
      
                  }
      
                  @Override
                  public void onResponse(@NonNull Call call, @NonNull final Response response) throws IOException {
                  }
              });
      

      【讨论】:

        【解决方案4】:

        此附加符号是编码的字节顺序掩码(请参阅https://en.wikipedia.org/wiki/Byte_order_mark)。此隐藏字符包含在您从中复制(或以编程方式读取)条目 ID 的文件中。

        读取文件时只需跳过此符号。或者用正确的编码打开这个文件。

        【讨论】:

        猜你喜欢
        • 2018-08-10
        • 2017-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-07
        • 1970-01-01
        • 2010-10-16
        相关资源
        最近更新 更多