Ошибка 302 при соединении Java с google-app-engine - PullRequest
1 голос
/ 27 октября 2011

Я использую Java-код для получения информации из веб-службы google-app-engine (testeserjaum.appspot.com), но он всегда печатает {null=[HTTP/1.1 302 Found], Date=[Wed, 26 Oct 2011 21:02:46 GMT], Content-Length=[0], Location=[https://testeserjaum.appspot.com/], Content-Type=[text/html], Server=[Google Frontend]} на первом System.out.println и null навторой.

Забавный факт заключается в том, что с другими веб-сервисами google-app-engine код работает отлично (я пробовал с testegelfur.appspot.com и он работал).

Вот код:

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class URLConnectionReader {
    public static void main(String[] args) throws MalformedURLException, IOException{
           URL url = new URL("http://testeserjaum.appspot.com/");
           HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
           System.out.println(urlConnection.getHeaderFields());
           try {
             InputStream in = new BufferedInputStream(urlConnection.getInputStream());
             BufferedReader buff = new BufferedReader(new InputStreamReader(in));
             System.out.println(buff.readLine());
           }finally{
             urlConnection.disconnect();
           }

    }
}

И я не знаю, помогает ли это, но вот эквивалент Python, который действительно работает.Я не могу использовать его, потому что я планирую использовать это программное обеспечение в приложениях для Android, и у меня есть большой объем программного обеспечения, так что это должно быть сделано в Java.

import urllib2
import base64

req = urllib2.Request('http://testeserjaum.appspot.com/')
req.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
#base64string = base64.encodestring('%s:%s' %('user', 'pass'))
#print base64string
#req.add_header("Authorization", "Basic %s" %base64string)
lol = urllib2.urlopen(req)
print lol.read()

Ответы [ 2 ]

5 голосов
/ 27 октября 2011

HTTP 302 - это перенаправление, а не ошибка. Вот почему он называется Найдено .

В частности, он сообщает клиенту выбрать https://testeserjaum.appspot.com/ вместо http://testeserjaum.appspot.com/.

Если вы не хотите иметь дело с перенаправлением, просто зайдите на https://testeserjaum.appspot.com/ напрямую.

2 голосов
/ 27 октября 2011

Это не ошибка.Это временное перенаправление, за которым вы можете следить.Некоторые библиотеки всегда следуют за перенаправлениями для вас;некоторые никогда не делают.Другие оставляют это на ваше усмотрение.Если библиотеки нет, вы можете сделать это в коде пользователя.

Однако Java предоставляет удобные setFollowRedirects именно для этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...