java - 使用java代码登录后向网站服务器发送响应代码500

标签 java web-services

我想制作java程序从网站下载文件,但我陷入了以下情况。当我运行以下代码时,页面记录已成功完成,但完成后,当我发送下一页的请求时,它显示响应代码 500。

public class Ss2mydb
{
    private List<String> cookies;
    private HttpURLConnection conn;

    private final String USER_AGENT = "Mozilla/5.0";

    public static void main(String[] args) throws Exception
    {
        String indexPage = "http://10.100.100.142/index.asp";
        String validatePage = "http://10.100.100.142/validate.asp";
        String ccmenuPage = "http://10.100.100.142/callcentre/ccmenu.asp";
    String reportPage = "http://10.100.100.142/topmgmt/reports/PROJECTVIJAY/get_download_cafs.asp";
        String reportPageDownload = "http://10.100.100.142/topmgmt/reports/PROJECTVIJAY/get_download_cafs.asp?view=N";

    Ss2mydb http = new Ss2mydb();

    // make sure cookies is turn on
    CookieHandler.setDefault(new CookieManager());

    // 1. Send a "GET" request, so that you can extract the form's data.
    String page = http.GetPageContent(indexPage);
    String postParams = http.getFormParams(page, "username", "password");


    // 2. Construct above post's content and then send a POST request for
    // authentication
    http.sendPost(validatePage, postParams);
//        System.exit(0);

    // 3. success then go to gmail.
    http.GetPageContent2(ccmenuPage);
        String result = http.GetPageContent2(reportPage);
    System.out.println(result);
    }

    private void sendPost(String url, String postParams) throws Exception {

    URL obj = new URL(url);
    conn = (HttpURLConnection) obj.openConnection();

    // Acts like a browser
    conn.setUseCaches(false);
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Host", "10.100.100.142");
    conn.setRequestProperty("User-Agent", USER_AGENT);
    conn.setRequestProperty("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
    conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
    for (String cookie : this.cookies) {
            System.out.println(" sendPost : "+cookie.split(";", 1)[0]);
        conn.addRequestProperty("Cookie",cookie.split(";", 1)[0]);
    }
    conn.setRequestProperty("Connection", "keep-alive");
    conn.setRequestProperty("Referer", "http://10.100.100.142/index.asp");
    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    conn.setRequestProperty("Content-Length", Integer.toString(postParams.length()));

    conn.setDoOutput(true);
    conn.setDoInput(true);

    // Send post request
    DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
    wr.writeBytes(postParams);
    wr.flush();
    wr.close();

    int responseCode = conn.getResponseCode();
    System.out.println("\nSending 'POST' request to URL : " + url);
    System.out.println("Post parameters : " + postParams);
    System.out.println("Response Code : " + responseCode);

//        setCookies(conn.getHeaderFields().get("Set-Cookie"));

    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();
    // System.out.println(response.toString());

  }

    private String GetPageContent2(String url) throws Exception {

    URL obj = new URL(url);
    conn = (HttpURLConnection) obj.openConnection();

    // default is GET
    conn.setRequestMethod("GET");

    conn.setUseCaches(false);

    // act like a browser
    conn.setRequestProperty("User-Agent", USER_AGENT);
    conn.setRequestProperty("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
    conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
        System.out.println(" L : "+cookies);
    if (cookies != null) {
        for (String cookie : this.cookies) {
                    System.out.println(" GetPageContent : "+cookie.split(";", 1)[0]);
            conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]);
        }
    }
    int responseCode = conn.getResponseCode();
    System.out.println("\nSending 'GET' request to URL : " + url);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();

    // Get the response cookies
//        System.out.println(" Get : "+conn.getHeaderFields().get("Set-Cookie"));
//  setCookies(conn.getHeaderFields().get("Set-Cookie"));

    return response.toString();

  }

  private String GetPageContent(String url) throws Exception {

    URL obj = new URL(url);
    conn = (HttpURLConnection) obj.openConnection();

    // default is GET
    conn.setRequestMethod("GET");

    conn.setUseCaches(false);

    // act like a browser
    conn.setRequestProperty("User-Agent", USER_AGENT);
    conn.setRequestProperty("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
    conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
        System.out.println(" L : "+cookies);
    if (cookies != null) {
        for (String cookie : this.cookies) {
                    System.out.println(" GetPageContent : "+cookie.split(";", 1)[0]);
            conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]);
        }
    }
    int responseCode = conn.getResponseCode();
    System.out.println("\nSending 'GET' request to URL : " + url);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();

    // Get the response cookies
        System.out.println(" Get : "+conn.getHeaderFields().get("Set-Cookie"));
    setCookies(conn.getHeaderFields().get("Set-Cookie"));

    return response.toString();

  }

  public String getFormParams(String html, String username, String password)
        throws UnsupportedEncodingException {

    System.out.println("Extracting form's data...");

    Document doc = Jsoup.parse(html);

    // Google form id
    Element loginform = doc.getElementById("right");
    Elements inputElements = loginform.getElementsByTag("input");
    List<String> paramList = new ArrayList<String>();
    for (Element inputElement : inputElements) {
        String key = inputElement.attr("name");
        String value = inputElement.attr("value");

        if (key.equals("USERname"))
            value = username;
        else if (key.equals("password"))
            value = password;
                if(!key.equals(""))
                    paramList.add(key + "=" + URLEncoder.encode(value, "UTF-8"));
    }

    // build parameters list
    StringBuilder result = new StringBuilder();
    for (String param : paramList) {
        if (result.length() == 0) {
            result.append(param);
        } else {
            result.append("&" + param);
        }
    }
    return result.toString();
  }

  public List<String> getCookies() {
    return cookies;
  }

  public void setCookies(List<String> cookies) {
    this.cookies = cookies;
  }
}

最佳答案

500 表示“内部服务器错误”(请参阅​​ HTTP codes 及其含义)。

这确实意味着您发送的请求已被理解并且是有效的 HTTP,但要么存在内部、不相关的问题,要么您发送的请求缺少某些参数或发送一些不正确的值,并且该遗漏/错误会导致服务器逻辑崩溃(因为它无法验证请求内容,或者以更深层次、不受控制的方式)。

获取更具体信息的唯一方法是查看服务器日志(如果开发人员仔细检查参数和日志信息)。

您最好的选择是使用像wireshark这样的工具分析网络浏览器和服务器之间的流量,然后分析客户端和服务器之间的流量并尝试找出差异。

关于java - 使用java代码登录后向网站服务器发送响应代码500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35171509/

相关文章:

java - Gradle 和 Realm 库的编译问题

java - Java中如何根据日期对列表<Date, String>进行排序

java - 使用 Apache Camel ProdcerTemplate 和 CxfComponent 发送多个参数作为 requestBody

java - 将 mahout 添加为使用 grizlly archetype 创建的 maven 项目的依赖项时出现 NoSuchMethodError 错误

java - NullPointerException w/Sound 类

java - JUnit测试检查三角形是否是矩形

android - 服务器无法处理您的请求,值不能为空 :soap parsing

ios - 当前用于 iOS 的库以使用 RESTful Web 服务

java - 重载java中的equals方法

ruby-on-rails - 在 Unicorn + Rails 应用程序中处理长请求