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

例如,如果您进入http://www.indianrail.gov.in/pnr_Enq.html并输入以下PNR号:2727059219,则输入该纯文本验证码(是的,我知道。很遗憾),然后单击“获取状态”,在Firebug中观看它,您可以清楚地看到参数。但是,当我在应用程序中执行几乎完全相同的操作时,它将不再起作用。请注意,验证码是由客户端脚本生成的5位随机数字,如果用户写的相同,则匹配。因此,在发送post参数时,无论是什么(生成和输入的)都像'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;
        }


有人可以告诉我代码在哪里错误吗?为何它只能在浏览器中工作?

最佳答案

您使用了错误的端点URL,那里有一个额外的字符。

更改您的URL:


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


注意删除的“ r” inet_pn * r * stat_cgi。

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

07-24 09:51
查看更多