Проблема:App Engine в: HTTP GET работает локально, но не при развертывании на GAE на конкретный URL
Локально мое приложение работает отлично. Мой HTTP GET возвращает код 200 и конечный URL-адрес: http://vow.mlspin.com/clients/index.aspx?
Остальная часть моего приложения отлично работает.
Когда я развертываю свой код на серверах GAE (я использую плагин Eclipse для развертывания), мое приложение перестает работать, потому что возвращается неправильная страница html! код возврата еще 200, но URL в настоящее время (конечный URL): http://vow.mlspin.com/clients/signin.aspx?id=
Мой вопрос: Есть ли проблема с переадресовывает? Являются ли серверы приложений Google как-то занесены в черный список? Что я здесь делаю неправильно? Кто-нибудь сталкивался с этим раньше?
Ближайший вопрос, который я нашел, был следующим: Http GET from GAE Java Я реализовал это предложение, но пока это не сработало.
Спасибо вам заранее!
Дополнительная информация -> ниже - заголовки HTTPResponse из одного и того же точного запроса GET, один из локального развертывания, а другой из развертывания GAE.
Локальный HTTP Response Headers
Date :: Tue, 24 Apr 2012 04:12:32 GMT
Server :: Microsoft-IIS/6.0
X-Powered-By :: ASP.NET
X-AspNet-Version :: 2.0.50727
P3P :: CP="NOI DSP COR NID ADMa OPTa OUR NOR"
Cache-Control :: no-cache
Pragma :: no-cache
Expires :: -1
Content-Type :: text/html; charset=utf-8
Content-Length :: 133704
Развернутые HTTP Response Headers
date :: Tue, 24 Apr 2012 04:11:19 GMT
server :: Microsoft-IIS/6.0
x-powered-by :: ASP.NET
x-aspnet-version :: 2.0.50727
p3p :: CP="NOI DSP COR NID ADMa OPTa OUR NOR"
cache-control :: private
content-type :: text/html; charset=utf-8
content-length :: 4991
x-google-cache-control :: remote-fetch
via :: HTTP/1.1 GWA
Как я крафта мои запросы:
Сначала я попробовал легкий путь
Document doc = Jsoup.connect(baseMLSURL).get();
тогда я попытался пойти низкий уровень и использовать только java.net
private String getHttpFromServer(String url) throws IOException
log.severe("getting http from: "+ url);
StringBuilder sb = new StringBuilder();
URL yahoo = new URL(url);
URLConnection yc = yahoo.openConnection();
yc.setRequestProperty("Host", "vow.mlspin.com");
yc.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1");
BufferedReader in = new BufferedReader(
new InputStreamReader(
yc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
sb.append(inputLine.replaceAll(" ", " ")+"\r\n");
}
in.close();
return sb.toString();
}
Наконец я также пытался использовать Google в URLFetcher
private String getHttpUsingFetchService(String url) throws MalformedURLException, IOException {
URLFetchService fetchService = URLFetchServiceFactory.getURLFetchService();
HTTPResponse targetResponse = fetchService.fetch(new URL(url)); // Error
log.severe("Code returned from request: "+targetResponse.getResponseCode());
log.severe("final URL: "+targetResponse.getFinalUrl());
String result = new String(targetResponse.getContent());
return result.replaceAll(" ", " ");
}
Это отличный совет, я собираюсь попробовать его сегодня вечером. Посмотрите, что я могу придумать. – eak12913
** update ** @ guido-van-rossum Я попытался отключить переадресацию и сам управлять кукисами, но после 4 переадресаций и настройки двух файлов cookie сервер, наконец, перенаправляет меня на страницу входа! Я здесь немного потерял. Я пробовал всевозможные комбинации настройки двух файлов cookie, которые я получал с сервера, но каждый раз - никакой радости. Есть ли другой способ обойти это? – eak12913
Спасибо за эту информацию. Это абсолютно ужасный дизайн. Я потратил много времени на то, чтобы понять, почему мой код работает локально, но не работает на AppEngine. – Chris