Добавить реферера на запрос лайк

от вопрос уже есть ответ здесь:

403 Запрещено с Java, но не с веб-браузером? 4 ответа

Я делаю консольное приложение Java, которому нужно отправить HTTP-запрос в Google Translate, чтобы получить перевод с вышеупомянутого сайта.

Моя проблема заключается в том, что я получаю сообщение об ошибке 403 при попытке прочитать с действительного URL, используяopenStream().

Создание экземпляра этого класса Translator сTranslator t = new Translator(); и звонитt.translate("en", "ja", "cheese");Например, должен вернуть перевод, который программа находит на страницеhttp://translate.google.com/#en|ja|cheeseкажется, но вместо этого он ловит IOException и возвращает это:

http://translate.google.com/#en|ja|cheese Server returned HTTP response code: 403 for URL: <a href="http://translate.google.com/#en|ja|cheese" rel="nofollow">http://translate.google.com/#en|ja|cheese</a>

Аналогичная ошибка возникает с любыми другими аргументами, которые создают действительный URL Google Translate.

A Ошибка 403 по-видимому, означает, что мне отказано в разрешении. Это то, что я хочу знать. Почему я не могу получить доступ к этой странице, и что я должен сделать, чтобы получить к ней доступ?

Я посетил сайт в своем веб-браузере и ввел адрес, к которому моя программа пытается получить доступ вручную, но это сработало; Я не уверен, почему моя программа не может получить доступ к странице? Ввод или копирование / вставка адреса в мою панель навигации FireFox работает; видишь ли, еслиэто правильно, то сайт может захотеть, чтобы я зашел на страницу по ссылкам на другой странице? Как я могу идти оэто, если это то, что я должен сделать?

Вот код, который, как я думаю, может помочь. Кажется, что возникает исключение, когда я пытаюсь создать BufferedReader из InputStreamReader из InputStream, возвращаемогоtranslationURL.openStream():

import java.io.*;
import java.net.*;

public class Translator {

    private final String googleTranslate = "http://translate.google.com/#";

    public String translate( String from, String to, String item ) {

        String translation = googleTranslate + from + '|' + to + '|' + item;
        URL translationURL;

        try { translationURL = new URL(translation); }
        catch(MalformedURLException e) { return e.getMessage(); }

        BufferedReader httpin;
        String fullPage = "";
        System.out.println(translation);
        try {
            httpin = new BufferedReader(
                    new InputStreamReader(translationURL.openStream()));
            String line;
            while((line=httpin.readLine()) != null) { fullPage += line + '\n'; }
            httpin.close();
        } catch(IOException e) { return e.getMessage(); }

        int begin = fullPage.indexOf("<span class=\"\">");
        int end = fullPage.indexOf("</span>");

        return fullPage.substring(begin + 15, end);

    }

    public Translator() {}
}

Я тестирую этот код в Eclipse (GALILEO) на Ubuntu Linux 11.04, установленной с Wubi, с работающим и надежным беспроводным интернет-соединением. Я также пытался запустить его в командной строке, но поведение было таким же.java -version дайте мне это:

java version "1.6.0_22" OpenJDK Runtime Environment (IcedTea6 1.10.2) (6b22-1.10.2-0ubuntu1~11.04.1) OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)

Ответы на вопрос(3)

Ваш ответ на вопрос