需要有关使用Cookie执行HTTP GET的Java Expert帮助

时间:2011-07-21 10:38:13

标签: java http

我的问题是我想用Java来实现一个向某个网站发送HTTP GET请求的应用程序。但是,目标网站需要设置一个cookie:

ShippingCountry = US

如果未设置此cookie,则返回错误指示。下面是我的代码段,我从connect()获得null。

String urlString = "http://www1.macys.com/catalog/index.ognc?CategoryID=5449&viewall=true";
    try{
    URL url = new URL(urlString);
    URLConnection connection = url.openConnection();

    connection.addRequestProperty("Cookie", "ShippingCountry=US");
    connection.connect();

    // Create file 
    FileWriter fstream = new FileWriter("d:/out.txt");
    BufferedWriter out = new BufferedWriter(fstream);
    BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    StringBuffer sb = new StringBuffer();
    String line;
    while ((line = rd.readLine()) != null)
    {
        out.write(line);
    }
    rd.close();
    //Close the output stream
    out.close();

}

有人能帮助我吗?

1 个答案:

答案 0 :(得分:3)

只是猜测,但也许您可能需要setRequestProperty而不是addRequestProperty,因为请求中只能有一个Cookie字符串。

connection.setRequestProperty("Cookie", "ShippingCountry=US");

如果你需要发送多个cookie值,你可以使用冒号:

connection.setRequestProperty("Cookie", "ShippingCountry=US;OtherValue=2");

<强>更新

我尝试使用python执行GET请求,看起来我得到500错误。也许服务器阻止了请求,因为它看起来不像Web浏览器。也许添加以下标题将起作用:

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: keep-alive

特别是可能需要AcceptUser-Agent标头。