Как я могу отправить строку, как это? - PullRequest
0 голосов
/ 08 ноября 2019

Я отправляю сообщение на канал телеграммы, и у меня появляется ошибка

Простая строка отправлена, но изменена по типу части массива, не отправляется

 String urlString = "https://api.telegram.org/bot%s/sendMessage?chat_id=%s&text=%s";

    String apiToken = "123843242734723";
    String chatId = "@Example";
    String text = Array[i]+ " hello";

    urlString = String.format(urlString, apiToken, chatId, text);

    URL url = null;
    try {
        url = new URL(urlString);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    URLConnection conn = url.openConnection();

Исключение втема "main" java.net.MalformedURLException: недопустимый символ в URL

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Кажется, что содержимое в массиве [i] происходит из элемента ввода html. Я подозреваю, что есть какой-то пробел, такой как \r\n, который передается на URL, который затем вызывает MalformedURLException.

Вот мой подход:

    public static void main(String[] args) throws IOException {
        // Here is where you would assign the content of your HTML element
        // I just put a string there that might resemble what you get from your HTML
        String timeHtmlInput = "12:00\r\n13:00\r\n14:00\r\n";

        // Split by carriage return
        String timeTokens[] = timeHtmlInput.split("\r\n");

        String urlString = "https://api.telegram.org/bot%s/sendMessage?chat_id=%s&text=%s";
        String apiToken = "123843242734723";
        String chatId = "@Example";
        String time = timeTokens[0];
        String text = time + "Hello";

        urlString = String.format(urlString, 
                URLEncoder.encode(apiToken, "UTF-8"), 
                URLEncoder.encode(chatId, "UTF-8"),
                URLEncoder.encode(text, "UTF-8"));

        URL url = new URL(urlString);
        System.out.println(url);
        URLConnection conn = url.openConnection();
    }

Кстати, этовсегда рекомендуется кодировать параметры строки запроса, например:

URLEncoder.encode(text, "UTF-8"));

, поскольку они также могут содержать некоторые другие недопустимые символы. Надеюсь, это поможет!

0 голосов
/ 08 ноября 2019

Символ @ должен быть закодирован. Например, замените его непосредственно на% 40. но вы также можете использовать

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