程序无法登录网站

时间:2014-10-13 11:16:49

标签: java http

这是我的代码:

        URL url = new URL("http://superchillin.com/login2.php");
        HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();

        urlConnection.setUseCaches(false);
        urlConnection.setRequestMethod("POST");
        String data = "email="+URLEncoder.encode(name, "UTF-8")+"&password="+URLEncoder.encode(pass, "UTF-8");

        urlConnection.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        urlConnection.setRequestProperty("Accept-Encoding", "gzip,deflate");
        urlConnection.setRequestProperty("Accept-Language", "en-US,en;q=0.8,lt;q=0.6");
        urlConnection.setRequestProperty("Cache-Control", "max-age=0");
        urlConnection.setRequestProperty("Connection", "keep-alive");
        urlConnection.setRequestProperty("Content-Length", Integer.toString(data.getBytes().length));
        urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        urlConnection.addRequestProperty("Cookie", "place=1");
        urlConnection.addRequestProperty("Cookie", "lvca_unique_user=1");
        urlConnection.setRequestProperty("Host", "superchillin.com");
        urlConnection.setRequestProperty("Origin", "http://superchillin.com");
        urlConnection.setRequestProperty("Referer", "http://superchillin.com/login.php");
        urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36");


        urlConnection.setDoOutput(true);
        urlConnection.setDoInput(true);
        urlConnection.setInstanceFollowRedirects(true);


        DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream());
        wr.writeBytes(data);
        wr.flush();
        wr.close();

在那段代码之后我只阅读了回复。它将我重定向到“login.php”并尝试设置cookie“place = 1”...

通过浏览器连接效果很好。这么多标题的原因是我认为它们可能是问题所以我复制了我在使用浏览器时看到的所有标题。

响应代码为200。

我还注意到,如果密码或电子邮件不正确,则会在我检索的HTML中显示一条消息。

当我使用浏览器时,我被重定向到index.php并设置了cookie“auth”。这就是我对我的程序的期望。我肯定会被重定向回“login.php”。

1 个答案:

答案 0 :(得分:1)

这个问题没有普遍的答案,我担心。你问的是“当我发送这个确切的请求时,为什么远程服务器不会返回auth cookie?”这完全取决于服务器的文档中有关这些请求的内容,是否存在实现中的任何错误等。

如果您无法访问服务器自己的源和日志,那么您可能需要通过实验。使用Firebug或Chrome的开发者工具之类的东西来捕获浏览器发送的确切请求,登录成功。由于这些文本字符串是远程服务器唯一看到的内容,如果您使用Java程序完全复制它们,您将(/应该)获得完全相同的响应。

如果您认为您从Java发送相同的请求并发现您仍未获得预期的响应,则必定存在一些差异。尝试使用Wireshark记录网络流量,以便准确了解您的应用发送的内容 - 然后解决差异。

如果你达到了没有遵循重定向,并且您不确定如何使用URLConnection - 然后这是一个很好的具体问题。