Добавить реферера на запрос лайк
от вопрос уже есть ответ здесь:
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)