HttpResponse仅显示来自Java应用程序的404错误,而不是来自网站

时间:2014-01-13 17:11:24

标签: java android http post httpresponse

这很奇怪,因为它像昨天一样工作,但今天停止工作(可能是网站做了一些更改)。我在Android应用中使用此代码发布到具有适当参数的网址。现在,当它开始显示404错误时,我尝试了各种帖子'标题',但仍然无效。

如果你转到http://www.indianrail.gov.in/pnr_Enq.html并输入例如这个PNR号码:2727059219,输入那个普通的TEXT验证码(是的,我知道。叹气。)并点击“获取状态”在Firebug中观看它,你可以看到参数清楚。当我在我的应用程序中做几乎完全相同的事情时,它不再起作用了。请注意,验证码是客户端脚本生成的随机5位数字,如果用户编写相同内容则匹配。因此,在发送帖子参数时,(生成和输入)中的任何内容(如“11111”)都可以正常工作。

这是我的代码,直到昨天才开始工作。评论的标题是我现在尝试但仍无效的标题:

        try 
        {
            HttpClient client = new DefaultHttpClient();
            HttpPost post = new HttpPost("http://www.indianrail.gov.in/cgi_bin/inet_pnrstat_cgi.cgi");

            post.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0");
            post.setHeader("Accept","text/html,application/xhtml+xml,application/xml");
            //post.setHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
            post.setHeader("Accept-Language", "en-US,en;q=0.5");
            post.setHeader("Accept-Encoding", "gzip, deflate");
            //post.setHeader("Referer", "http://www.indianrail.gov.in/pnr_Enq.html");
            //post.setHeader("Content-Type", "application/x-www-form-urlencoded");
            post.setHeader("Connection", "keep-alive");

            List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
            urlParameters.add(new BasicNameValuePair("lccp_cap_val", "11111"));
            urlParameters.add(new BasicNameValuePair("lccp_capinp_val", "11111"));
            urlParameters.add(new BasicNameValuePair("lccp_pnrno1", "2727059219"));     //the PNR number taken from app, but hard coded to test     
            urlParameters.add(new BasicNameValuePair("submit", "Get+Status"));

            post.setEntity(new UrlEncodedFormEntity(urlParameters));

            HttpResponse response = client.execute(post);
            if(response.getStatusLine().getStatusCode() != 200)
                throw new Exception("Error " + String.valueOf(response.getStatusLine().getStatusCode()));               String result = EntityUtils.toString(response.getEntity());


        } 
        catch (Exception ex) 
        {
            mException = ex;
        }

有人能告诉我代码在哪里错了吗?为什么它只能从浏览器中运行?

1 个答案:

答案 0 :(得分:2)

您使用的是错误的端点网址,那里有一个额外的字符。

更改您的网址

  

http://www.indianrail.gov.in/cgi_bin/inet_pnstat_cgi.cgi

注意已移除'r'inet_pn * r * stat_cgi。

我能够复制404;使用更改的网址,它可以工作 - 不再是404。