Модификация вызова неправильного URL, если строка URL содержит символ «~», вызывает ошибку 404 - PullRequest
0 голосов
/ 09 января 2019

Я создал модифицированный клиент и интерфейс API, но при модификации пропускалась какая-то часть в URL и вызывался неправильный URL

вот полный URL http://192.168.0.201/~amol/eflbudget/budgetmanagements/test

URL, который звонит http://192.168.0.201/budgetmanagements/test/

это вызывает ошибку 404

//here is my retrofit client code 

public static Retrofit getClient() {
    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder()
            .addInterceptor(interceptor)
            .build();

    if (retrofit != null) {
        return retrofit;
    }

    Gson gson = new GsonBuilder()
            .setLenient()
            .create();

    retrofit = new Retrofit.Builder()
            .baseUrl("http://192.168.0.201/")
            .addConverterFactory(GsonConverterFactory.create(gson))
            .client(client)
            .build();

    return retrofit;
}

// below is api call
@Multipart
@POST("/~amol/eflbudget/budgetmanagements/test/")
Call<ResponseBody> postMail(
        @Part("user_id") RequestBody userId,
        @Part("lead_id") RequestBody leadId,
        @Part("to") RequestBody to,
        @Part("cc_to") RequestBody ccId,
        @Part("template_id") RequestBody tempId,
        @Part("sender") RequestBody senderId,
        @Part("subject") RequestBody subject,
        @Part("message") RequestBody message,
        @Part MultipartBody.Part file
);

ожидаемый URL-адрес: http://192.168.0.201/~amol/eflbudget/budgetmanagements/test

фактический URL: http://192.168.0.201/budgetmanagements/test/

здесь / ~ amol / eflbudget эта часть в URL игнорируется
Кто-нибудь может предложить что-то здесь?

1 Ответ

0 голосов
/ 09 января 2019

В RFC указаны следующие символы:

Незарезервированные символы

Символы, которые разрешены в URI, но не имеют зарезервированных цель называются безоговорочными. К ним относятся прописные и строчные буквы буквы, десятичные цифры, дефис, точка, подчеркивание и тильда.

  unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"

Бернерс-Ли и соавт. Трек стандартов [Страница 13]

Общий синтаксис RFC 3986 URI Январь 2005

URI, которые отличаются заменой незарезервированного символа на соответствующий ему октет US-ASCII, закодированный в процентах, эквивалентен: они идентифицировать тот же ресурс. Однако реализации сравнения URI не всегда выполняйте нормализацию перед сравнением (см. раздел 6). Для согласованности, октеты в процентах в диапазонах ALPHA (% 41-% 5A и% 61-% 7A), DIGIT (% 30-% 39), дефис (% 2D), период (% 2E), подчеркивание (% 5F) или тильда (% 7E) не должны создаваться URI производители и, если они найдены в URI, должны быть декодированы в их соответствующие незарезервированные символы нормализаторами URI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...