求解析HTTP响应的方法(最好是与httpclient相关的解法) httpmime内容解析 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我最近也在学习httpclient,下面是我的一部分代码:import org.apache.commons.httpclient.*;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.params.HttpClientParams;import org.apache.commons.httpclient.params.HttpMethodParams;import java.awt.image.BufferedImage;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import javax.imageio.ImageIO;public class MyHttpClient { public String number; public String code=""; public StringBuffer contentBuffer = new StringBuffer(); // 构造HttpClient的实例 HttpClient httpClient = new HttpClient(); HttpClientParams clientParams = new HttpClientParams(); HttpState httpState = new HttpState(); GetMethod getMethod; PostMethod method; public void getCode(){ // 隐藏自己请求相关的信息 clientParams.setParameter("http.useragent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 6.0)"); clientParams.setHttpElementCharset("GBK"); httpClient.setParams(clientParams); httpClient.getParams().setParameter(HttpClientParams.HTTP_CONTENT_CHARSET, "GBK"); httpClient.setState(httpState); clientParams.setVersion(HttpVersion.HTTP_1_1); // 创建GET方法的实例 getMethod = new GetMethod("http://10.1.74.16/checkcode.asp"); // 使用系统提供的默认的恢复策略 getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); int statusCode; try { statusCode = httpClient.executeMethod(getMethod); // System.out.println(statusCode); if (statusCode != HttpStatus.SC_OK) { System.err.println("Method failed: " + getMethod.getStatusLine()); } // 读取内容 InputStream inStream = getMethod.getResponseBodyAsStream(); // 处理内容 // System.out.println(new String(responseBody)); BufferedImage iag = ImageIO.read(inStream); Ident imgIdent = new Ident(iag); imgIdent.saveJPEG(iag, "\\2.jpg"); String validate = imgIdent.getValidatecode(4); number = validate; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void login(String userID, String password) { try { method = new PostMethod("http://10.1.74.16/login.asp"); method.setParameter("userId", userID); method.setParameter("pwd", password); method.setParameter("GetCode",number); method.setParameter("radioUserType", "student"); code = httpClient.executeMethod(method) + ""; if(!code.equals("302")) System.out.println("登录失败!"); method.releaseConnection(); } catch (Exception e) { // 发生网络异常 e.printStackTrace(); } finally { } getMethod.releaseConnection(); } public void getSource(String textYear){ contentBuffer = new StringBuffer(); if (code.equals("302")) { method = new PostMethod( "http://10.1.74.16/studentWeb/ViewScore/ViewYearScore.asp"); method.setParameter("textYear",textYear); try { httpClient.executeMethod(method); InputStream inStr = method.getResponseBodyAsStream(); InputStreamReader istreamReader = new InputStreamReader(inStr, "GB2312"); BufferedReader buffStr = new BufferedReader(istreamReader); String str = null; while ((str = buffStr.readLine()) != null) { contentBuffer.append(str); contentBuffer.append("\n"); } inStr.close(); //System.out.println(contentBuffer); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else{ System.out.println("登录失败!"); contentBuffer.append("登录失败!"); } }}至于数据的解析我就不是很清楚了,我正在想办法把获取到的html字节流解析,据说jsoup可以 "--data-boundary------"就是响应回来的字符串中原始内容?这个响应格式Java封装了处理方式吗?既不是JSON也不是XML或者其他标记语言格式。 这个是原始数据的内容。它是http正文数据的标准形式之一。实际上这是一个基于http的音频码流,我要做的是解析这个码流,获取里面的音频数据(头部后面跟着的数据块)进行播放。 使用了DataInputStream勉强处理了这种问题,反正没有多语言的烦恼。参见:http://bbs.csdn.net/topics/310107460 求生成AIXS2 客户端的好插件 jdbc连数据库的问题!!急急急急急急急 用自己写的类加载器加载类后的问题? JFreechart中如何控制纵轴的最大表示尺度 java能编按键精灵之类的软件么 求救jcreator pro3.00.094的注册码!非常感谢! 向大家请教?????????????? java中有对配置文件*.ini的操作吗? 一個看著簡單不容易解決的問題. java菜鸟求助 线程问题的困惑 请教一个IM的留言板的小技术环节的故障调试.
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.commons.httpclient.params.HttpMethodParams;import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;import javax.imageio.ImageIO;public class MyHttpClient {
public String number;
public String code="";
public StringBuffer contentBuffer = new StringBuffer();
// 构造HttpClient的实例
HttpClient httpClient = new HttpClient();
HttpClientParams clientParams = new HttpClientParams();
HttpState httpState = new HttpState();
GetMethod getMethod;
PostMethod method;
public void getCode(){
// 隐藏自己请求相关的信息
clientParams.setParameter("http.useragent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 6.0)"); clientParams.setHttpElementCharset("GBK"); httpClient.setParams(clientParams);
httpClient.getParams().setParameter(HttpClientParams.HTTP_CONTENT_CHARSET, "GBK");
httpClient.setState(httpState);
clientParams.setVersion(HttpVersion.HTTP_1_1);
// 创建GET方法的实例
getMethod = new GetMethod("http://10.1.74.16/checkcode.asp"); // 使用系统提供的默认的恢复策略
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
int statusCode;
try {
statusCode = httpClient.executeMethod(getMethod);
// System.out.println(statusCode);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: "
+ getMethod.getStatusLine());
} // 读取内容 InputStream inStream = getMethod.getResponseBodyAsStream(); // 处理内容
// System.out.println(new String(responseBody));
BufferedImage iag = ImageIO.read(inStream);
Ident imgIdent = new Ident(iag); imgIdent.saveJPEG(iag, "\\2.jpg");
String validate = imgIdent.getValidatecode(4); number = validate;
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void login(String userID, String password) { try {
method = new PostMethod("http://10.1.74.16/login.asp");
method.setParameter("userId", userID);
method.setParameter("pwd", password);
method.setParameter("GetCode",number);
method.setParameter("radioUserType", "student"); code = httpClient.executeMethod(method) + "";
if(!code.equals("302")) System.out.println("登录失败!");
method.releaseConnection();
} catch (Exception e) { // 发生网络异常
e.printStackTrace();
} finally {
}
getMethod.releaseConnection();
}
public void getSource(String textYear){
contentBuffer = new StringBuffer();
if (code.equals("302")) {
method = new PostMethod(
"http://10.1.74.16/studentWeb/ViewScore/ViewYearScore.asp");
method.setParameter("textYear",textYear); try {
httpClient.executeMethod(method);
InputStream inStr = method.getResponseBodyAsStream();
InputStreamReader istreamReader = new InputStreamReader(inStr,
"GB2312");
BufferedReader buffStr = new BufferedReader(istreamReader);
String str = null;
while ((str = buffStr.readLine()) != null) {
contentBuffer.append(str);
contentBuffer.append("\n");
}
inStr.close();
//System.out.println(contentBuffer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else{
System.out.println("登录失败!");
contentBuffer.append("登录失败!");
}
}
}至于数据的解析我就不是很清楚了,我正在想办法把获取到的html字节流解析,据说jsoup可以
这个响应格式Java封装了处理方式吗?既不是JSON也不是XML或者其他标记语言格式。
实际上这是一个基于http的音频码流,我要做的是解析这个码流,获取里面的音频数据(头部后面跟着的数据块)进行播放。
参见:http://bbs.csdn.net/topics/310107460