这是get和 post请求
public static String GetPost(QQBean qb, String url ,String method, String data)
{
System.out.println("value:  " + url);
//创建默认HttpClient实例
DefaultHttpClient httpclient=new DefaultHttpClient();
//处理重定向
HttpParams params = httpclient.getParams();  

/*
 * 判断是get 还是post
 */
HttpResponse response = null ;
if(method.equalsIgnoreCase(Method.GET.name())) 
        {
try 
{
//创建httpGet
HttpGet httpget = new HttpGet(url);

httpget.setHeader("Accept", "*/*");
httpget.setHeader("Accept-Language", "zh-cn");
httpget.setHeader("Cache-Control", "no-cache");
httpget.setHeader("Accept-Charset", "UTF-8;");
httpget.setHeader("Referer", "http://zc.qq.com/");
httpget.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727)");           
httpget.setHeader("Cookie", qb.getCookie());
//执行get请求
response = httpclient.execute(httpget);
}catch(Exception e) 
{
e.printStackTrace();
}finally
     {
     //httpclient.getConnectionManager().shutdown();
     }
        }else if(method.equalsIgnoreCase(Method.POST.name()))
        {
     try 
     {
     //创建httpPost
     HttpPost httppost = new HttpPost(url);
     httppost.setHeader("Accept", "*/*");
     httppost.setHeader("Accept-Language", "zh-cn");
     httppost.setHeader("Cache-Control", "no-cache");
     httppost.setHeader("Accept-Charset", "UTF-8;");
     httppost.setHeader("Content-Type","application/x-www-form-urlencoded");
     httppost.setHeader("Referer", "http://zc.qq.com/");
     httppost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727)");           
     httppost.setHeader("Cookie", qb.getCookie());
     //创建post参数
     System.out.println("data:  "+ data);
     httppost.setEntity(new StringEntity(data));
     //执行post请求
     response = httpclient.execute(httppost);
     } catch(Exception e) 
     {
     e.printStackTrace();
     }
        }
//处理cookies 和location 和打印响应内容
if(response != null)
{
Header[] headers = response.getAllHeaders();
for(int i = 0; i < headers.length; i++)
{
String s = headers[i].getValue();
//获取Location
if(headers[i].getName().equalsIgnoreCase("Location"))
{

}
//设置cookie
String str = qb.getCookie();
if(headers[i].getName().equals("Set-Cookie"))
{
str+=s.substring(0,s.indexOf(";")+1)+" ";
}
qb.setCookie(str);
}
System.out.println("cookie:   " +qb.getCookie());
try
{
StringBuffer sb = new StringBuffer();
BufferedReader br=new BufferedReader(new InputStreamReader(response.getEntity().getContent(),"UTF-8"));
String str="";
while ((str = br.readLine()) != null)
{
sb.append(str+"\n");
}
return sb.toString();
}catch (Exception e) 
{
e.printStackTrace();

}
return "";
}
然后main方法里面调用
String data = "&verifycode=byvc&qzone_flag=0&country=1&province=44&city=1&isnongli=0&year=2012&month=1&day=1&isrunyue=0&password=4f261378279ad843fb5e99d4a2728b5054b67c516872d5fd225cabd523cf3ad0ddea21afd2c9948306523e781374fc5a60ff9201876661594e8cedb7aaa8d0bbf317b102f612b5c076415ced1dec42bd43f88be884923feeb67c0e0bb141287a0050aae2e48e94b3734a5e5607ba7c3ed9167d67f859e6b6147acc64de5dccd6&nick=%E5%B0%8F%E5%8F%B7&email=false&other_email=false&elevel=1&sex=1&qzdate=&jumpfrom=58030&csloginstatus=1&z8k4d=l0r0j";
String result = QQGetPost.GetPost(qb,"http://zc.qq.com/cgi-bin/chs/numreg/get_acc?r=0.6210656588814718", Method.POST.name(), data);
就会爆出异常,我试过别的URL没事,就这个URL会出现异常
org.apache.http.client.ClientProtocolException
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
at QQGetPost.GetPost(QQGetPost.java:78)
at ScriptEngineTest.main(ScriptEngineTest.java:22)
Caused by: org.apache.http.ProtocolException: Unable to parse status code from status line: HTTP/1.1 100-Continue
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:212)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:271)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235)
at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)
at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:231)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:124)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:410)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
... 4 more
Caused by: org.apache.http.ParseException: Unable to parse status code from status line: HTTP/1.1 100-Continue
at org.apache.http.message.BasicLineParser.parseStatusLine(BasicLineParser.java:419)
at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:99)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:210)
... 11 more

解决方案 »

  1.   

    晕,错误是Httpclient分析status code是结果不是数字
    把"HTTP/1.1"当数字转换了。要么httpclient对付你不了那个qq的url。 要么你升级下httpclient碰碰运气。
    最新好像4.1.x了把。
      

  2.   


    /创建默认HttpClient实例
    DefaultHttpClient httpclient=new DefaultHttpClient();
    //处理重定向
    HttpParams params = httpclient.getParams();   
    // 避免'Expect: 100-continue' handshake
    params.setParameter(HttpClientParams.USE_EXPECT_CONTINUE,Boolean.FALSE);
    //设置ws连接超时时间
    params.setParameter(HttpClientParams.CONNECTION_MANAGER_TIMEOUT, 100);
    httpclient.setProperty(CommonsHttpMessageSender.HTTP_CLIENT_PARAMS,params);
    加上这段