Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java发布到站点,导航通过';我同意';重新使用_Java_Url_Post - Fatal编程技术网

使用Java发布到站点,导航通过';我同意';重新使用

使用Java发布到站点,导航通过';我同意';重新使用,java,url,post,Java,Url,Post,我正在尝试访问一个站点,并获取要处理的请求以遵循重定向。 我访问了“我同意”网站,但它似乎没有继续过去,并不断重定向我 这是我的密码: public static void main(String[] args) { System.out.println("results"); //String targetConfirmation18 = ""; URL url; HttpURLConnection connection; OutputStreamWr

我正在尝试访问一个站点,并获取要处理的请求以遵循重定向。 我访问了“我同意”网站,但它似乎没有继续过去,并不断重定向我

这是我的密码:

public static void main(String[] args)
{
    System.out.println("results");
    //String targetConfirmation18 = "";

    URL url;
    HttpURLConnection connection;
    OutputStreamWriter osw = null;
    BufferedReader br = null;
    String line;

    try { 
        url = new URL("");
        //url = new URL(targetConfirmation);
        connection = (HttpURLConnection)url.openConnection();
        connection.setDoInput(true);
        connection.setDoOutput(true);
        osw = new OutputStreamWriter(connection.getOutputStream());
        osw.write("");
        osw.flush();

        br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    } catch (Exception e) {
            e.printStackTrace();
    } finally {
        try {
            br.close();
        } catch (IOException ioe) {
            // nothing to see here
        }
    }
}

在您发布18+url后,网站将设置cookies。您必须记住它们,并随下一个请求一起提交。你可以很容易地用FireBug解决这个问题

因此,您需要使用比简单URL更高级的HTTP客户端。例如,它允许cookie操作


本节专门介绍Cookie。

我怀疑您违反了。他们说:

您可以使用行业标准的web浏览器下载和查看内容,仅用于个人、非商业用途

保留本协议未明确授予的所有权利


我敢肯定,这里的问题是HTTP会话

当您使用浏览器浏览站点时,服务器将创建HTTP会话并将其ID作为cookie之一发送。然后,浏览器会在每个请求上发回cookies,以便服务器能够识别这是现有会话

我认为当会话未知时,服务器总是将您重定向到18+页

那么,在您的案例中,为什么会话是未知的呢?这是因为你所有的请求都是独立的。你应该做一个浏览器。不要从发布到18+确认页面开始。从HTTP get开始,它会将您重定向到此页面。从响应头集合Cookie中获取Cookie,并使用请求头“Cookie”将Cookie发送回

您还可以使用更高级别的工具,如Jakarta HTTP client,自动完成这项工作,但自己实现它是一个很好的练习。我多次尝试这种技术,发现它也适用于标准的HttpUrlConnection

顺便说一句,我希望这不是你的情况,但有时你必须模仿用户代理:将自己呈现为已知的浏览器之一。否则,某些网站会将您重定向到显示您的浏览器不受支持的页面


祝你好运。

^我在谷歌上搜索了很久,似乎我需要使用httpclient。你能解释一下在这个例子中如何使用httpclient吗?或者只是给我指出一些正确的方向,比如一些例子。你的答案是非常感谢你可能想阅读他们的教程。我更新了答案,提到了关于cookies的特定部分。从技术上讲,这是一个有趣的项目,但我同意@Stephen的说法,这可能违反了他们的服务条款。你将有效地绕过他们的18+检查,这可能是非盟法律所要求的。你需要伪造你的标题。就这么简单。例如,如果你想使用Java编写的爬行器来爬行网络,你最好通过假冒的用户代理,假装你是一个非常普通的导航器,比如Firefox.Hi。谢谢你的回答。我解决了我的问题。我正在使用一个HttpPost来尝试获得回复。。它一直重定向到18+页面。我把它改成了一个HttpGet,它工作得很好!现在提取cookie并继续我的会话!我忘了提一下,我设法用你建议的雅加达httpclient完成了