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

标签 java android http post httpresponse

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

如果您转到http://www.indianrail.gov.in/pnr_Enq.html输入例如这个 PNR 号码:2727059219,输入纯文本验证码(是的,我知道。叹气。)然后单击“获取状态”在 Firebug 中观看,您可以清楚地看到参数。当我在我的应用程序中执行几乎完全相同的操作时,它不再起作用了。请注意,验证码是由客户端脚本生成的随机 5 位数字,并且如果用户写入相同的内容则匹配。因此,任何东西,比如“11111”(生成的和输入的)在发送 post 参数时都可以工作。

这是我的代码,直到昨天才起作用。注释的标题是我现在尝试过但仍然不起作用的标题:

        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,其中有多余的字符。

更改您的网址:

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

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

我能够复制 404;更改后的网址即可正常工作 - 不再是 404。

关于java - HttpResponse 仅显示来自 Java 应用程序的 404 错误,而不显示来自网站的 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21097243/

相关文章:

javascript - 如何在用户点击jquery时自动安装Android应用程序

java - 从无限滚动页面检索 HTML 内容 (Facebook)

http - 缓存动态内容的反向代理

java.lang.UnsatisfiedLinkError : no jhdf5 in java. 库.path

java - Android - 如何在另一个叠加层的 onTap 操作中显示另一个叠加层

java - Project Reactor 的 Flux 在处理错误期间获取失败项目

c# - Xamarin Android App 导致设备重启

java - 如何在 MainActivity.java 中发出简单的 HTTP 请求? (安卓工作室)

java - jackson :忽略未知的枚举值

java - 你应该避免使用 Guavas Ordering.using ToString() 吗?