我试图从URL获取InputStream。该URL可以从Firefox打开。它返回一个json,我已经在Firefox中安装了一个用于查看json的插件,所以我可以在那里查看它。
所以我试图通过以下方式从Java中获取它:
URL url = new URL(urlString);
URLConnection urlConnection = url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
但它在urlConnection.getInputStream()中抛出IOException。
我也尝试过:
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = url.openStream();
但没有运气。
任何信息都很明显。提前致谢。
谢谢大家。这是一个奇怪的问题,但最后我解决了它。
我要求的网址是
http://api.themoviedb.org/2.1/Movie.search/en/json/api_key/a nightmare on elm street
现在浏览器在内部用“%20”替换“榆树街上的噩梦”之间的空格并进行解析。这就是请求的服务器可以响应该请求的原因。但是从Java我没有用“%20”替换那个空格,所以它变成了Bad Request,source。
现在它正在运作。
BufferedReader reader = new BufferedReader(new InputStreamReader(((HttpURLConnection) (new URL(urlString)).openConnection()).getInputStream(), Charset.forName("UTF-8")));
我有一个类似的问题,我的网址是:
http://www.itmat.upenn.edu/assets/user-content/documents/ITMAT17. October 10 2017_.pdf
其中显然包含空格。
这些导致java.io.IOException Server在以下代码中返回了HTTP响应代码:400:
java.net.URL url = new URL(urlString);
java.io.InputStream in = url.openStream();
如果您复制上面的网址并粘贴到浏览器中,您会发现浏览器会为空格添加“%20”。所以我使用以下代码手动完成,问题解决了。
if(urlString.contains(" "))
urlString = urlString.replace(" ", "%20");
你正确设置连接?这里有一些代码说明了如何做到这一点。请注意,我对这里的异常处理很懒,这不是生产质量代码。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class URLFetcher {
public static void main(String[] args) throws Exception {
URL myURL = new URL("http://www.paulsanwald.com/");
HttpURLConnection connection = (HttpURLConnection) myURL.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder results = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
results.append(line);
}
connection.disconnect();
System.out.println(results.toString());
}
}
编码URL中的参数,如下所示:
String messageText = URLEncoder.encode(messageText, "UTF-8");