Java 为什么这个请求返回一个带字节的字符串而不是JSON?
我使用该库向返回JSON数据的特定端点发出GET请求。但它返回的字符串类型是字节,而不是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
<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扩展)。可能是服务器返回了错误的值?在我看来,您的服务器已响应压缩/压缩数据