У меня есть небольшое приложение Java, которое, учитывая список ссылок для мест Google, должно вернуть идентификатор для каждого из указанных мест в Google (длинная история, мы хранили ссылки для мест вместо их ИД, и только теперь понял, что ссылки не уникальны для каждого места).Ошибка детализирования детали детали - слишком длинная ссылка
Мое приложение отлично работает примерно на 95% мест в списке, но с некоторыми статусами не отображается код состояния «NOT_FOUND». Некоторое исследование показывает, что ссылка места для этих конкретных мест (в сочетании с префиксом https://maps.googleapis.com/maps/api/place/details/json?sensor=false&key=myApiKey) содержит около 2 символов для URL-адреса. Последние пары символов усекаются.
Моя первоначальная мысль заключалась в том, что я просто сделаю запрос POST для API google places, но я возвращаю код статуса «REQUEST_DENIED» с серверов Google при отправке его в качестве запроса POST.
В любом случае, это просто ошибка, возникшая с помощью API google places (теперь, когда количество мест слишком сильно отодвинуло ссылку?).
Следует также отметить, что места, которые не удалены, совсем недавно добавлены нашим приложением.
Это то, что мой текущий (работает на 95%) код выглядит следующим образом:
public static JSONObject getPlaceInfo(String reference) throws Exception
{
URL places = new URL("https://maps.googleapis.com/maps/api/place/details/json?sensor=false&key="+apiKey+"&reference="+reference);
URLConnection con = places.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuffer input = new StringBuffer();
String inputLine;
while ((inputLine = in.readLine()) != null)
input.append(inputLine);
in.close();
JSONObject response = (JSONObject) JSONSerializer.toJSON(input.toString());
return response;
}
и это то, что мой "ACCESS_DENIED" Почтовый код выглядит следующим образом:
public static JSONObject getPlaceInfo(String reference) throws Exception
{
String data = URLEncoder.encode("sensor", "UTF-8") + "=" + URLEncoder.encode("true", "UTF-8");
data += "&" + URLEncoder.encode("key", "UTF-8") + "=" + URLEncoder.encode(apiKey, "UTF-8");
data += "&" + URLEncoder.encode("reference", "UTF-8") + "=" + URLEncoder.encode(reference, "UTF-8");
URL places = new URL("https://maps.googleapis.com/maps/api/place/details/json");
URLConnection con = places.openConnection();
con.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
wr.write(data);
wr.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuffer input = new StringBuffer();
String inputLine;
while ((inputLine = in.readLine()) != null)
input.append(inputLine);
in.close();
JSONObject response = (JSONObject) JSONSerializer.toJSON(input.toString());
return response;
}
Пример из ссылка не удалась:
CnRtAAAAxm0DftH1c5c6-krpWWZTT51uf0rDqCK4jikWV6eGfXlmKxrlsdrhFBOCgWOqChc1Au37inhf8HzjEbRdpMGghYy3dxGt17FEb8ys2CZCLHyC--7Vf1jn-Yn1kfZfzxznTJAbIEg6422q1kRbh0nl1hIQ71tmdOVvhdTfY_LOdbEoahoUnP0SAoOFNkk_KBIvTW30btEwkZs
Заранее благодарен!
Это действительно решает сообщение ACCESS_DENIED (и объясняет, почему он не работал, Я бы добавил +1, если бы мой представитель был достаточно высоким!), Но он более или менее такой же, как мой первый (95% рабочий) фрагмент кода. Это не решает проблему слишком долгого URL-адреса GET из-за огромного ссылочного параметра. – Lawrence