java 用 HttpClients 请求 url 返回状态码是 503 怎么处理? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ray0625
V2EX    问与答

java 用 HttpClients 请求 url 返回状态码是 503 怎么处理?

  ray0625 2015-10-30 09:40:43 +08:00 9571 次点击
这是一个创建于 3704 天前的主题,其中的信息可能已经有所发展或是发生改变。

请求代码:
public static String get(String url) throws Exception {
log.info("HTTP GET:" + url);
HttpGet req = new HttpGet(url);
req.setHeader("Content-type", "application/json");
req.setHeader("charset", "UTF-8");
HttpResponse res = HttpClients.createDefault().execute(req);
String result = "";
if (200 == res.getStatusLine().getStatusCode()) {
result = EntityUtils.toString(res.getEntity());
}
return result;
}
res.getStatusLine().getStatusCode()是 503
但是用浏览器直接访问地址是可以返回值的,请教哪里写错了

8 条回复    2015-10-30 18:43:52 +08:00
ray0625
    1
ray0625  
OP
   2015-10-30 10:30:20 +08:00
调试信息: HTTP/1.0 503 Service Unavailable [Cache-Control: no-cache, Connection: close, Content-Type: text/html]
sometimesna1ve
    2
sometimesna1ve  
   2015-10-30 10:32:13 +08:00
浏览器访问正常 , 打开 console 看下浏览器 request 的 header 都有什么,
在代码里面对应的全部 set 上就 OK 了.

初步目测你的 request 少了 User Agent 这个 header, 可以加上再试试.
weiceshi
    3
weiceshi  
   2015-10-30 10:33:05 +08:00
网页直接访问 header 里有 user-agent ,有 referer ,有 accept ,有 accept-encoding ,有 accept-language ,或许还有 cookie
所以网页能直接访问,不代表你直接写 http get 就能获取结果

准确的模拟 http 请求的方式是用先 fiddler 抓包
之后要么模拟全部 header ,要么在 composer 里反复试验判断必须项
hicdn
    4
hicdn  
   2015-10-30 10:42:29 +08:00
Content-type 和 charset 都是是响应头的内容
anexplore
    5
anexplore  
   2015-10-30 12:32:16 +08:00
从浏览器看看 Request Header 有哪些,想 Refer 、 Cookie 、 UA 等
ray0625
    6
ray0625  
OP
  &nbs;2015-10-30 16:11:26 +08:00
谢谢大家,添加了 header 的内容果然好了,有没有人再给说一下 post 请求呢? post 请求是不是也要添加那一堆 header ?还有用 httpwatch 之类的抓包工具,像这种没有页面之间填地址和请求参数的的 post 请求该怎么调试呢?
Ouyangan
    7
Ouyangan  
   2015-10-30 16:57:58 +08:00
get 有 header 认证的话, post 应该也会有的 .
关于 header 信息 , 有些网站有这方面的认证请求的 , 一般而言都会带上 , 你可以自己封装工具类以免重复添加 header 操作 . 下面是一个 post 实例:
HttpClient client = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("txtLoginName", username));
params.add(new BasicNameValuePair("txtPassWord2", originPassword));
httpPost.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
HttpResponse respOnse= client.execute( httpPost);
HttpEntity entity = response.getEntity();
String webString = EntityUtils.toString(entity, "utf-8");
ray0625
    8
ray0625  
OP
   2015-10-30 18:43:52 +08:00
@Ouyangan 谢谢,我已经调通了,都是 header 的问题
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2491 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 44ms UTC 10:28 PVG 18:28 LAX 02:28 JFK 05:28
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86