使用httpclient4.0 jar包出异常

lagegela 2012-08-17 01:34:22
这是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
...全文
261 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cscript 2012-08-20
  • 打赏
  • 举报
回复

/创建默认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);


加上这段
lagegela 2012-08-17
  • 打赏
  • 举报
回复
没人帮忙啊 顶下 都沉了
lagegela 2012-08-17
  • 打赏
  • 举报
回复
是不是我的写法有问题啊。。。换了4.1的包 一开始就爆异常了!
scbb 2012-08-17
  • 打赏
  • 举报
回复
晕,错误是Httpclient分析status code是结果不是数字。。。
把"HTTP/1.1"当数字转换了。

要么httpclient对付你不了那个qq的url。 要么你升级下httpclient碰碰运气。
最新好像4.1.x了把。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧