本帖最后由 qq355538000 于 2010-07-16 14:57:33 编辑

解决方案 »

  1.   

    2010-7-16 15:10:53 org.apache.http.impl.client.DefaultRequestDirector execute
    信息: I/O exception (org.apache.http.NoHttpResponseException) caught when processing request: The target server failed to respond
    2010-7-16 15:10:53 org.apache.http.impl.client.DefaultRequestDirector execute
    信息: Retrying request
    2010-7-16 15:10:54 org.apache.http.impl.client.DefaultRequestDirector execute
    信息: I/O exception (org.apache.http.NoHttpResponseException) caught when processing request: The target server failed to respond
    2010-7-16 15:10:54 org.apache.http.impl.client.DefaultRequestDirector execute
    信息: Retrying request
    2010-7-16 15:10:54 org.apache.http.impl.client.DefaultRequestDirector execute
    信息: I/O exception (org.apache.http.NoHttpResponseException) caught when processing request: The target server failed to respond
    2010-7-16 15:10:54 org.apache.http.impl.client.DefaultRequestDirector execute
    信息: Retrying request
    Exception in thread "main" org.apache.http.NoHttpResponseException: The target server failed to respond
    at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:101)
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:210)
    at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:271)
    at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:227)
    at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:209)
    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:292)
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:126)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:483)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
    at framework.common.http.BaiduPost.main(BaiduPost.java:51)
    捕着处理信息:目标服务器没有回应
      

  2.   

    会百度HTTPS登陆的麻烦给个HttpClient4.0的POST登录问题
      

  3.   


    tr id="vcodeTr" style="display:none;">
                    <td class="f14" valign="top">验证码:</td>
                    <td><input type="text" name="verifycode" class="ip" style="width:60px" maxlength="4"/>
                    <br />
                    <span class="fgy">请输入下面的字符</span><br />
                    <img src="/?verifypic" width="100" height="40" id="verifypic" /> <a href="javascript:newverifypic();" title="看不清左边的字符">看不清?</a></td>        </tr>它在登录的时候是需要输入验证码的,而这个验证码是是一个图片的形式,你获取不到里面的字母数字,是没法用httpclient进行登录的
      

  4.   

    还有,页面的编码格式不是utf-8,是gb2312<meta http-equiv=content-type content="text/html; charset=gb2312">
      

  5.   

    之前网上找来的代码,我以前用4.0的时候也是那么郁闷,慢慢适应改变吧,不过我发现多看看4.0自带的例子很有帮助。
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.params.CookiePolicy;
    import org.apache.http.client.params.HttpClientParams;
    import org.apache.http.cookie.Cookie;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.params.HttpParams;/**
     * 使用httpclient4登陆百度
     * @author gohands
     *
     */
    public class BaiduLogin {
       
        private static String URL_CHARACTER = "gb2312"; // 统一字符集
        /**
         * @param args
         */
        public static void main(String[] args) throws Exception {
            //初始化
            DefaultHttpClient httpclient = new DefaultHttpClient();
            // 这一行必须要加,否则服务器无法获取登陆状态
            HttpClientParams.setCookiePolicy(httpclient.getParams(),CookiePolicy.BROWSER_COMPATIBILITY);        // 第一次访问
            String url = "http://www.baidu.com";
            HttpGet httpget = new HttpGet(url);
            HttpResponse response = httpclient.execute(httpget);
            System.out.println("Length1::" + response.getEntity().getContentLength());
            HttpEntity entity = response.getEntity();
            BaiduLogin.printEntity(entity);        // 使用POST方式登录
            HttpPost httpost = new HttpPost("http://passport.baidu.com/?login");
            List<NameValuePair> nvps = new ArrayList<NameValuePair>();
            nvps.add(new BasicNameValuePair("username", "111"));
            nvps.add(new BasicNameValuePair("password", "111"));
            httpost.setEntity(new UrlEncodedFormEntity(nvps, BaiduLogin.URL_CHARACTER));        HttpParams params=httpclient.getParams();
            System.out.println(params.getParameter("username"));
            response = httpclient.execute(httpost);
            
            // 第二次访问
            System.out.println("\n----------------------------------------");
            System.out.println(response.getStatusLine());
            List<Cookie> cookies = httpclient.getCookieStore().getCookies();
            entity = response.getEntity();
            BaiduLogin.printEntity(entity);
            
            System.out.println("\n----------------------------------------");        cookies = httpclient.getCookieStore().getCookies();        System.out.println("cookies" + cookies.size());
            httpget = new HttpGet(url);
            // httpget.setr
            // httpget.setHeader(name, value)
            response = httpclient.execute(httpget);
            System.out.println("Length2::"
                    + response.getEntity().getContentLength());
            entity = response.getEntity();
            BaiduLogin.printEntity(entity);
        }    /**
         * 输出entity内容,获取和输出返回的HTML文
         * @param entity
         * @throws IllegalStateException
         * @throws IOException
         */
        private static void printEntity(HttpEntity entity)
                throws IllegalStateException, IOException {        if (entity == null) {
                return;
            }
            System.out.println("HttpEntity start >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
            System.out.println("Response content length: " + entity.getContentLength());
            InputStream is = entity.getContent();
            BufferedReader in = new BufferedReader(new InputStreamReader(is));
            List<Byte> li = new ArrayList();
            int i;        //之所以写的如此复杂是因为了解决中文问题
            while ((i = is.read()) != -1) {
                li.add((byte) i);
            }
            byte a[] = new byte[li.size()];
            for (i = 0; i < a.length; i++) {
                a[i] = (byte) li.get(i);
            }
            System.out.println(new String(a, BaiduLogin.URL_CHARACTER)); // 打印HTML内容
            entity.consumeContent(); // entity销毁
            System.out.println("HttpEntity END >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        }
    }
      

  6.   

    HttpPost httpost = new HttpPost("http://passport.baidu.com/?login");    这行报错,提示没有这个方法httpclient 4.0