2017-03-20 5 views
1

POST 요청에서 쿼리 매개 변수로 JSON 배열을 제공해야하는 API를 처리하고 있습니다. 견적은 url에 있어야하지만 OkHttp와 HttpURL은 계속이 URL을 %22으로 변환합니다. API는이를 인식하지 못하고 오류 코드를 반환합니다. Okhttp가 요청시 견적을 보존하도록하려면 어떻게해야합니까? 나는이 같은 외모를 처리하고 코드 :OkHttp를 사용하여 큰 따옴표를 보존하는 방법

public static void post(String url, String[][] requestParams, Callback callback) { 
    HttpUrl httpUrl = addParamsToURL(getAbsoluteUrl(url), requestParams); 


    Request request = new Request.Builder() 
      .url(httpUrl) 
      .addHeader("app", Prefs.getString(Constants.HEADER_APP, null)) 
      .addHeader("authoToken", Prefs.getString(Constants.HEADER_AUTH_TOKEN, null)) 
      .post(RequestBody.create(MediaType.parse("application/json"), "")) 
      .build(); 
    okHttpClient.newCall(request).enqueue(callback); 
} 

private static HttpUrl addParamsToURL(String url, String[][] requestParams) { 
    HttpUrl httpUrl = HttpUrl.parse(url); 
    HttpUrl.Builder urlBuilder = httpUrl.newBuilder(); 
    for(int i = 0, size = requestParams.length; i < size; i++) { 
     urlBuilder.addEncodedQueryParameter(requestParams[i][0], requestParams[i][1]); 
    } 
    return urlBuilder.build(); 
} 

나는 요청이 https://www.baseurl.com/path?queryName=["[email protected]"]처럼 보이도록하기 위해 간다하지만 https://www.baseurl.com/path/?queryName=[%[email protected]%22]

답변

1

당신이 강하게 Jesse Wilson의 말씀 고려해야하지만, 해결 방법으로 당신은 사람들이 제안 무엇을 볼 수 있지만 이 스레드에서 :

,363,210

특히 Mike Nakhimovich suggests 인터셉터 통해 다시 인코딩 된 문자를 대체 :

request.url(originalRequest.url().toString().replace("%3D","=")); 
+1

그것은 업 상기 오타 문제 _not_ 이중 인용이라고 판명되었지만 선. 그러나 나는 서버가 제대로 설정되지 않은 많은 사람들이 문제를 알고 있으므로 대답을 선택하고 있습니다. – drawinfinity

2

서버를 수정처럼 대신에 보이는 URL을해야합니다. OkHttp는 쿼리 문자열에 모두 " ~ %22을 인 코드하는 웹 브라우저와 일치합니다.

크롬 :

GET /?a=[%[email protected]%22] HTTP/1.1 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 

파이어 폭스 :

GET /?a=[%[email protected]%22] HTTP/1.1 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Firefox/52.0 

사파리

GET /?a=[%[email protected]%22] HTTP/1.1 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8