HttpClient 的问题 在java 下编译出错。
我是新手,所以一边看代码,一边编译,加深理解,结果,一编译就报错,
但又不是语法错误,求高手给解释一下。
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.message.BasicHttpResponse;
public class Client {
static URI uri;
/**
* @param args
* @throws IOException
* @throws ClientProtocolException
* @throws URISyntaxException
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,
HttpStatus.SC_OK, "OK");
System.out.println(response.getProtocolVersion());
System.out.println(response.getStatusLine().getStatusCode());
System.out.println(response.getStatusLine().getReasonPhrase());
System.out.println(response.getStatusLine().toString());
}
}
Exception in thread "main" java.lang.RuntimeException: Stub!
at org.apache.http.message.AbstractHttpMessage.<init>(AbstractHttpMessage.java:6)
at org.apache.http.message.BasicHttpResponse.<init>(BasicHttpResponse.java:8)
at Client.main(Client.java:20)
[解决办法]
异常没捕捉,要么捕捉,要么在main方法上抛出
建议写class时用eclipse,这样自动会给你提示的
[解决办法]
里面一定有会产生异常的方法,抛异常throws +异常类型或者try catch,我还有一个疑问,你怎么没连接URL。给你个简单参考的
- Java code
package http.demo;import java.io.IOException;//http://passport.csdn.net/account/login?from=http%3A%2F%2Fhi.csdn.net%3F%26t%3D1317216244import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.HttpMethod;import org.apache.commons.httpclient.HttpStatus;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.params.HttpMethodParams;public class Httpclient {public static void main(String[] args) throws IOException{ HttpClient httpclient=new HttpClient(); HttpMethod method=new GetMethod("http://baidu.com"); method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); try { int statusCode=httpclient.executeMethod(method); if(statusCode!=HttpStatus.SC_OK); { System.err.println("Method failed: "+method.getStatusLine()); } byte[] responseBody=method.getResponseBody(); System.out.println(new String(responseBody)); } catch (HttpException e) { // TODO Auto-generated catch block System.out.println("Please check your provided http address!"); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } method.releaseConnection();}}
[解决办法]
public class HttpConnect {
public static String readContentFromGet(String getUrlString, String param,
String udcode, String password, String path) throws IOException {
// 拼凑get请求的URL字串,使用URLEncoder.encode对特殊和不可见字符进行编码
// String getURL =getUrlString+URLEncoder.encode(param,udcode);
if (getUrlString.startsWith("https:")) {
// System.setProperty("javax.net.ssl.trustStore",path);
// / System.setProperty("javax.net.ssl.trustStorePassword",chante);
System.setProperty("javax.net.ssl.keyStore", "server.ks");
System.setProperty("javax.net.ssl.keyStorePassword", "Passw0rds");
}
String getURL = getUrlString + param;
URL getUrl = new URL(getURL);
// 根据拼凑的URL,打开连接,URL.openConnection函数会根据URL的类型,
// 返回不同的URLConnection子类的对象,这里URL是一个http,因此实际返回的是HttpURLConnection
HttpURLConnection connection = (HttpURLConnection) getUrl
.openConnection();
// 进行连接,但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到
// 服务器
connection.connect();
// 取得输入流,并使用Reader读取 ?????????????Reader???
String msg = "";
msg = HttpConnect.convertStreamToString(connection.getInputStream());
System.out.println(msg);
connection.disconnect();
return msg;
}
public static String readContentFromPost(String postUrlString,
String param, String udcode, String password, String path)
throws IOException {
// Post请求的url,与get不同的是不需要带参数
URL postUrl = new URL(postUrlString);
if (postUrlString.startsWith("https:")) {
System.setProperty("javax.net.ssl.trustStore",
"D:\\certi\\server.ks");
System.setProperty("javax.net.ssl.trustStorePassword", "accident");
System
.setProperty("javax.net.ssl.keyStore",
"D:\\certi\\server.ks");
System.setProperty("javax.net.ssl.keyStorePassword", "accident");
}
// 打开连接
HttpURLConnection connection = (HttpURLConnection) postUrl
.openConnection();
// Output to the connection. Default is
// false, set to true because post
// method must write something to the
// connection
// 设置是否向connection输出,因为这个是post请求,参数要放在
// http正文内,因此需要设为true
connection.setDoOutput(true);
// Read from the connection. Default is true.
connection.setDoInput(true);
// Set the post method. Default is GET
connection.setRequestMethod("POST");
// Post cannot use caches
// Post 请求不能使用缓存
connection.setUseCaches(false);
// This method takes effects to
// every instances of this class.
// URLConnection.setFollowRedirects是static函数,作用于所有的URLConnection对象。
// connection.setFollowRedirects(true);
// This methods only
// takes effacts to this
// instance.
// URLConnection.setInstanceFollowRedirects是成员函数,仅作用于当前函数
connection.setInstanceFollowRedirects(true);
// Set the content type to urlencoded,
// because we will write
// some URL-encoded content to the
// connection. Settings above must be set before connect!
// 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
// 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode
// 进行编码
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
// 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
// 要注意的是connection.getOutputStream会隐含的进行connect。
connection.connect();
DataOutputStream out = new DataOutputStream(connection
.getOutputStream());
// The URL-encoded contend
// 正文,正文内容其实跟get的URL中'?'后的参数字符串一致
String content = URLEncoder.encode(param, udcode);
// DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写道流里面
out.writeBytes(content);
out.flush();
out.close(); // flush and close
String msg = "";
msg = HttpConnect.convertStreamToString(connection.getInputStream());
System.out.println(msg);
connection.disconnect();
return msg;
}
public static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}