java.net.URLConnection
在这里经常询问使用情况,Oracle教程对此非常简洁.
该教程基本上只显示了如何触发GET请求并读取响应.它没有解释如何使用它来执行POST请求,设置请求标头,读取响应标头,处理cookie,提交HTML表单,上传文件等.
那么,我如何使用java.net.URLConnection
触发和处理"高级"HTTP请求?
我HTTPURLConnection
用来连接到Web服务.我知道如何使用,HTTPURLConnection
但我想了解它是如何工作的.基本上,我想知道以下内容:
HTTPURLConnection
尝试建立与给定URL的连接?getOutputStream
和getInputStream
外行的任期?我注意到,当我试图连接到服务器宕机,我得到Exception
的getOutputStream
.这是否意味着HTTPURLConnection
我只会在调用时开始建立连接getOutputStream
?怎么样getInputStream
?因为我只能得到响应getInputStream
,那么这是否意味着我还没有发送任何请求getOutputStream
但只是建立连接?HttpURLConnection
我调用时是否回到服务器请求响应getInputStream
?openConnection
只是创建一个新的连接对象,但尚未建立任何连接?java inputstream outputstream urlconnection httpurlconnection
我尝试过本教程: 从Web获取数据
我尝试在平板电脑的最新平台Android 3.0上实现它,但是,我收到此错误:" 无法解析主机"www.anddev.org"没有与主机名关联的地址. "
您可以签出我用来证明该文件存在的URL. http://www.anddev.org/images/tut/basic/getdatafromtheweb/loadme.txt
我创建了一个私有类,并使用asynctask扩展它.这是代码:
private class Downloader extends AsyncTask<String,Void,String>{
String myString = null;
@Override
protected String doInBackground(String... arg0) {
try{
URL myURL = new URL("http://www.anddev.org/images/tut/basic/getdatafromtheweb/loadme.txt");
URLConnection ucon = myURL.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while((current=bis.read())!=-1){
baf.append((byte)current);
}
myString = new String (baf.toByteArray());
}catch(Exception e){
myString = e.getMessage();
}
return myString;
}
@Override
protected void onPostExecute(String result){
tv.setText(result);
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
android urlconnection android-asynctask android-3.0-honeycomb
我ConnectException: Connection timed out
从代码中获得了一些频率.我试图点击的网址已经启动.相同的代码适用于某些用户,但不适用于其他用户.似乎一旦一个用户开始获得此异常,他们就会继续获得异常.
这是堆栈跟踪:
java.net.ConnectException: Connection timed out
Caused by: java.net.ConnectException: Connection timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.Socket.connect(Socket.java:516)
at java.net.Socket.connect(Socket.java:466)
at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:365)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:477)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:214)
at sun.net.www.http.HttpClient.New(HttpClient.java:287)
at sun.net.www.http.HttpClient.New(HttpClient.java:299)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:796)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:748)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:673)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:840)
Run Code Online (Sandbox Code Playgroud)
以下是我的代码中的代码段:
URLConnection urlConnection = null;
OutputStream outputStream = null;
OutputStreamWriter outputStreamWriter = null;
InputStream inputStream = null;
try {
URL url = new URL(urlBase);
urlConnection = url.openConnection();
urlConnection.setDoOutput(true);
outputStream = …
Run Code Online (Sandbox Code Playgroud) 我想将一些文件上传到HTTP服务器.基本上我需要的是一些带有一些参数和文件的服务器POST请求.我见过只上传文件的例子,但没有找到如何传递其他参数.
这样做最简单,最自由的解决办法是什么?有没有人有我可以学习的文件上传示例?我一直在谷歌上搜索几个小时,但(也许只是其中一天)我找不到我需要的东西.最好的解决方案是不涉及任何第三方类或库的东西.
是否有任何方便的方法来读取和解析来自传入请求的数据.
例如客户发起邮寄请求
URLConnection connection = new URL(url).openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
PrintWriter writer = null;
try {
OutputStream output = connection.getOutputStream();
writer = new PrintWriter(new OutputStreamWriter(output, charset), true); // true = autoFlush, important!
// Send normal param.
writer.println("--" + boundary);
writer.println("Content-Disposition: form-data; name=\"param\"");
writer.println("Content-Type: text/plain; charset=" + charset);
writer.println();
writer.println(param);
Run Code Online (Sandbox Code Playgroud)
我无法使用param request.getParameter("paramName")
.以下代码
BufferedReader reader = new BufferedReader(new InputStreamReader(
request.getInputStream()));
StringBuilder sb = new StringBuilder();
for (String line; (line = reader.readLine()) != null;) {
System.out.println(line);
}
Run Code Online (Sandbox Code Playgroud)
但是为我显示内容
-----------------------------29772313742745 …
Run Code Online (Sandbox Code Playgroud) 我需要在Android应用程序上下载一个网页,我很难决定是否使用android apache http客户端或java的URLConnection.
有什么想法吗?
我试图从HTTP URL解析XML文件.如果XML提取时间超过此时间,我想配置15秒的超时,我想报告超时.出于某种原因,setConnectTimeout和setReadTimeout不起作用.这是代码:
URL url = new URL("http://www.myurl.com/sample.xml");
URLConnection urlConn = url.openConnection();
urlConn.setConnectTimeout(15000);
urlConn.setReadTimeout(15000);
urlConn.setAllowUserInteraction(false);
urlConn.setDoOutput(true);
InputStream inStream = urlConn.getInputStream();
InputSource input = new InputSource(inStream);
Run Code Online (Sandbox Code Playgroud)
我正在捕捉SocketTimeoutException.
谢谢克里斯
是什么区别URLConnection
,HttpURLConnection
和HttpsURLConnection
(使用SSL).在什么条件下,我应该使用哪一个?
urlconnection ×10
java ×9
android ×3
connect ×1
connection ×1
file-upload ×1
http ×1
httprequest ×1
inputstream ×1
outputstream ×1
servlets ×1
timeout ×1