Разница между DataOutputStream и OutputStreamWriter: совместимость строк? - PullRequest
0 голосов
/ 28 апреля 2018

Я довольно новичок в Java, но у меня разные результаты при использовании OutputStreamWriter и DataOutputStream с запросом POST HttpUrlConnection.

Я могу добавить параметры при использовании DataOutputStream.

URL url = new URL("https://www.google-analytics.com/debug/collect");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;");
conn.setRequestMethod("POST");

String parameters = "v=1&tid=UA-62749954-12&cid=test.clientid.456&t=event&ec=offline_cv&ea=register";

DataOutputStream writer = new DataOutputStream(conn.getOutputStream());
writer.writeBytes(parameters);

writer.close();
conn.connect();

Ответ:

{  "hitParsingResult": [ {    "valid": true,    "parserMessage": [ ],    "hit": "/debug/collect?v=1\u0026tid=UA-62749954-12\u0026cid=test.clientid.456\u0026t=event\u0026ec=offline_cv\u0026ea=register"  } ],  "parserMessage": [ {    "messageType": "INFO",    "description": "Found 1 hit in the request."  } ]}

Но я не могу добавить параметры при использовании OutputStreamWriter.

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(URLEncoder.encode(parameters, "UTF-8"));

Ответ:

{  "hitParsingResult": [ {    "valid": false,    "parserMessage": [ {      "messageType": "ERROR",      "description": "A value is required for parameter 'v'. Please see https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#v for details.",      "messageCode": "VALUE_REQUIRED",      "parameter": "v"    } ],    "hit": "/debug/collect"  } ],  "parserMessage": [ {    "messageType": "INFO",    "description": "Found 1 hit in the request."  } ]}

Это потому, что DataOutputStream совместим со String, а OutputStreamWriter - нет?

1 Ответ

0 голосов
/ 28 апреля 2018

1) Проблема здесь:

URLEncoder.encode(parameters, "UTF-8")

Ваши параметры уже закодированы в URL. Вызов этого метода делает их уродливыми.

2) Используйте некоторый инструмент для мониторинга HTTP-запросов, чтобы узнать, что происходит с запросом и ответом.

...