Java 为什么这个请求返回一个带字节的字符串而不是JSON?

Java 为什么这个请求返回一个带字节的字符串而不是JSON?,java,json,http,okhttp,okhttp3,Java,Json,Http,Okhttp,Okhttp3,我使用该库向返回JSON数据的特定端点发出GET请求。但它返回的字符串类型是字节,而不是JSON 以下是我正在尝试的: <OTHER CLASSES REDACTED> public static class GetDrivesRequest { private final OkHttpClient client = new OkHttpClient(); public Response run(String offset, HashMap < String, Stri

我使用该库向返回JSON数据的特定端点发出GET请求。但它返回的字符串类型是字节,而不是JSON

以下是我正在尝试的:

<OTHER CLASSES REDACTED>

public static class GetDrivesRequest {
 private final OkHttpClient client = new OkHttpClient();

 public Response run(String offset, HashMap < String, String > headers) throws IOException {
  if (offset == null || offset == "") offset = "0";

  HttpUrl mUrl = new HttpUrl.Builder()
   .scheme("https")
   .host("www.waze.com")
   .addPathSegment("row-Descartes-live")
   .addPathSegment("app")
   .addPathSegment("Archive")
   .addPathSegment("List")
   .addQueryParameter("minDistance", "1000")
   .addQueryParameter("count", "50")
   .addQueryParameter("offset", offset)
   .build();

  Request.Builder requestB = new Request.Builder()
   .url(mUrl);

  for (Map.Entry < String, String > entry: headers.entrySet()) {
   String key = entry.getKey();
   String value = entry.getValue();

   if (key != "" && value != "") {
    requestB.addHeader(key, value);
   }
  }

  Request request = requestB.build();

  Response response = client.newCall(request).execute();
  return response;
 }
}

public static void main(String[] args) throws Exception {
  String GET_CSRF_URL = "https://www.waze.com/login/get";
  String SESSION_URL = "https://www.waze.com/login/create";
  String SESSION_LIST_URL = "https://www.waze.com/row-Descartes-live/app/Archive/List";
  String SESSON_DATA_URL = "https://www.waze.com/row-Descartes-live/app/Archive/SessionGPS";

  // ===[ 1 - Get CSRF token ]===============
  // ----------------------------------------
  GetCsrfRequest getCsrf = new GetCsrfRequest();
  Response req = getCsrf.run(GET_CSRF_URL);

  // ===[ 2 - Login ]===============
  // -------------------------------
  HashMap<String, String> cookies = new HashMap<String, String>();
  cookies.put("editor_env", "row");
  cookies.put("_web_session", req.headers().toString().split(":")[6].split("=")[1].split(";")[0]);
  cookies.put("_csrf_token", req.headers().toString().split(":")[9].split("=")[1].split(";")[0]);

  HashMap<String, String> headers = new HashMap<String, String>();
  headers.put("Accept", "*/*");
  headers.put("Accept-Encoding", "gzip, deflate");
  headers.put("Accept-Language", "nl,en;q=0.8,en-US;q=0.6,es;q=0.4,de;q=0.2,fr;q=0.2,it;q=0.2");
  headers.put("Connection", "keep-alive");
  headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
  headers.put("Cookie", cookies.toString());
  headers.put("Host", "www.waze.com");
  headers.put("Origin", "https://www.waze.com/");
  headers.put("Referer", "https://www.waze.com/");
  headers.put("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36");
  headers.put("X-CSRF-Token", req.headers().toString().split(":")[9].split("=")[1].split(";")[0]);
  headers.put("X-Requested-With", "XMLHttpRequest");

  PostRequest postLogin = new PostRequest();
  Response req2 = postLogin.run(SESSION_URL, "<REDACTED>", "<REDACTED>", headers);

  // ===[ 3 - Get list of drives ]===============
  // --------------------------------------------
  HashMap<String, String> cookies2 = new HashMap<String, String>();
  cookies2.put("editor_env", "row");
  cookies2.put("_web_session", req2.headers().toString().split(":")[6].split("=")[1].split(";")[0]);
  cookies2.put("_csrf_token", req2.headers().toString().split(":")[9].split("=")[1].split(";")[0]);

  HashMap<String, String> headers2 = new HashMap<String, String>();
  headers2.put("Accept", "*/*");
  headers2.put("Accept-Encoding", "gzip, deflate");
  headers2.put("Accept-Language", "nl,en");
  headers2.put("Connection", "keep-alive");
  headers2.put("Content-Type", "application/json");
  headers2.put("Cookie", cookies2.toString());
  headers2.put("Host", "www.waze.com");
  headers2.put("Origin", "https://www.waze.com/");
  headers2.put("Referer", "https://www.waze.com/");
  headers2.put("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36");
  headers2.put("X-Requested-With", "XMLHttpRequest");

  GetDrivesRequest drivesRequest = new GetDrivesRequest();
  Response req3 = drivesRequest.run("0", headers2);
  System.out.println(req3.body().string());
}

公共静态类GetDrivesRequest{
私有最终OkHttpClient客户端=新OkHttpClient();
公共响应运行(字符串偏移量,HashMapheaders)引发IOException{
如果(offset==null | | offset==“”)offset=“0”;
HttpUrl mUrl=新的HttpUrl.Builder()
.scheme(“https”)
.host(“www.waze.com”)
.addPathSegment(“活笛卡尔行”)
.addPathSegment(“应用程序”)
.addPathSegment(“存档”)
.addPathSegment(“列表”)
.addQueryParameter(“minDistance”、“1000”)
.addQueryParameter(“计数”、“50”)
.addQueryParameter(“偏移量”,偏移量)
.build();
Request.Builder requestB=新建Request.Builder()
.url(mUrl);
对于(Map.EntryEntry:headers.entrySet()){
String key=entry.getKey();
字符串值=entry.getValue();
如果(键!=“”&值!=“”){
requestB.addHeader(键、值);
}
}
Request=requestB.build();
Response=client.newCall(request.execute();
返回响应;
}
}
公共静态void main(字符串[]args)引发异常{
字符串GET\u CSRF\u URL=”https://www.waze.com/login/get";
字符串会话\u URL=”https://www.waze.com/login/create";
字符串会话\u列表\u URL=”https://www.waze.com/row-Descartes-live/app/Archive/List";
字符串SESSON_DATA_URL=”https://www.waze.com/row-Descartes-live/app/Archive/SessionGPS";
//==[1-获取CSRF令牌]===============
// ----------------------------------------
GetCsrfRequest getCsrf=新建GetCsrfRequest();
Response req=getCsrf.run(GET\u CSRF\u URL);
//=[2-登录]===============
// -------------------------------
HashMap cookies=新建HashMap();
cookies.put(“编辑环境”、“行”);
cookies.put(“_web_session”,req.headers().toString().split(“:”[6]。split(“=”[1]。split(“;”[0]);
cookies.put(“_csrf_token”,req.headers().toString().split(“:”[9]。split(“=”[1]。split(“;”[0]);
HashMap headers=新的HashMap();
标题。放置(“接受”、“*/*”);
headers.put(“接受编码”、“gzip、deflate”);
headers.put(“接受语言”,“nl,en;q=0.8,en-US;q=0.6,es;q=0.4,de;q=0.2,fr;q=0.2,it;q=0.2”);
标题。放置(“连接”、“保持活动”);
headers.put(“内容类型”、“应用程序/x-www-form-urlencoded;字符集=UTF-8”);
headers.put(“Cookie”,cookies.toString());
headers.put(“主机”,“www.waze.com”);
headers.put(“原点”https://www.waze.com/");
headers.put(“Referer”https://www.waze.com/");
headers.put(“用户代理”、“Mozilla/5.0(Macintosh;英特尔Mac OS X 10_10_5)AppleWebKit/537.36(KHTML,如Gecko)Chrome/48.0.2564.116 Safari/537.36”);
headers.put(“X-CSRF-Token”,req.headers().toString().split(“:”[9]。split(“=”[1]。split(“;”[0]);
headers.put(“X-request-With”,“XMLHttpRequest”);
PostRequest postLogin=new PostRequest();
Response req2=postLogin.run(会话URL,“,”,标题);
//==[3-获取驱动器列表]===============
// --------------------------------------------
HashMap cookies2=新的HashMap();
cookies2.put(“编辑环境”、“行”);
cookies2.put(“_web_session”,req2.headers().toString().split(“:”[6]。split(“=”[1]。split(“;”[0]);
cookies2.put(“_csrf_token”,req2.headers().toString().split(“:”[9]。split(“=”[1]。split(“;”[0]);
HashMap headers2=新的HashMap();
标题2.投入(“接受”,“*/*”);
headers2.put(“接受编码”、“gzip、deflate”);
标题2.put(“接受语言”、“nl、en”);
头2.放置(“连接”、“保持活动”);
headers2.put(“内容类型”、“应用程序/json”);
校长2.放(“饼干”,厨师2.toString());
headers2.put(“主机”,“www.waze.com”);
标题2.put(“来源”https://www.waze.com/");
标题2.put(“Referer”https://www.waze.com/");
headers2.put(“用户代理”、“Mozilla/5.0(Macintosh;英特尔Mac OS X 10_10_5)AppleWebKit/537.36(KHTML,如Gecko)Chrome/48.0.2564.116 Safari/537.36”);
标题2.put(“X-request-With”,“XMLHttpRequest”);
GetDrivesRequest drivesRequest=新建GetDrivesRequest();
响应请求3=驱动器请求运行(“0”,标题2);
System.out.println(requ3.body().string());
}
这似乎返回一个充满字节的字符串:

����n7��e�:�I��9����؋X�#�U@л���
�F��IR�9��js�����ϤN��Y�U`�`��\-$��čj�]���A�Y-�;
��8y�l5�����q��/4��|sxw��>��D��5r�2���<O!�-���]&g�2�vj����C���,�v��cM�0[�lD�uO���;��i�0�"��fR�>���ϭJ�ijf�zF  ������w��F��4FI�ԫV���1������
dGQ��8����56�4b���X6y�]8��cF)j8Ⱦ�p��    ĺ��N栙l�IT��K�-Y�����ϚA�1���c���K��1u�����
�E���?���8��P_��K�����y�Kֲ��3y
��J�3�oc�$��h#��Ls���k7��s�xp}Y)b�I�sၧ>���&���2=klƧ�t�1G����5p�q)`�BL��X�̎=�%�渖�{�k��8��g�V��Ê�ZwPPKEZp�+�o��ɨ�0cf�`/�d��&Cnjy�DB��}���Ƃ��f����Pw���W5��Z�0Y'��|�qCM8�}$�96����
wZ�q}�����.��]>���H������5�TL��{_{f�S�P�3;[���`ˤ) ��F30BP�_
BČn{
�;��g$�͌3b�/���<w
q��"�2�fU�5p�q�Şr����"�8��j�Ůт��S~��7��ol���:�������G#
����n7��E�:�我��9����؋X�#�U@а���
�F��红外光谱�9��js�����ϤN��Y�U`�`��\-$��čj�]���A.�Y-�;

��8y�l5�����Q��/4.��|sxw��>��D��5r�2.���您在
req3.body().contentType().toString()
中得到了什么?@petermm我得到了
application/json
您是否尝试用相同的头手动调用此地址?您可以使用各种工具来实现这一点,例如Postman(chrome扩展)。可能是服务器返回了错误的值?在我看来,您的服务器已响应压缩/压缩数据