解决方案 »

  1.   

    我最近也在学习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可以
      

  2.   

    "--data-boundary------"就是响应回来的字符串中原始内容?
    这个响应格式Java封装了处理方式吗?既不是JSON也不是XML或者其他标记语言格式。
      

  3.   

    这个是原始数据的内容。它是http正文数据的标准形式之一。
    实际上这是一个基于http的音频码流,我要做的是解析这个码流,获取里面的音频数据(头部后面跟着的数据块)进行播放。
      

  4.   

    使用了DataInputStream勉强处理了这种问题,反正没有多语言的烦恼。
    参见:http://bbs.csdn.net/topics/310107460