是否可以通过Jsoup“发送”cookie到服务器?

时间:2015-12-02 16:24:09

标签: java cookies jsoup

我正在尝试从网站上检索商品价格。问题是,如果您选择在线价格或商店价格,价格会有所不同。选择商店后,网站会创建一个名为CP_GEODATA的cookie,其中包含特定值。我尝试以不同的方式发送cookie,但我不断获得在线价格。

public class Parser {

    public static void main(String[] args) throws Exception {
        Map<String, String> cookies =  new HashMap<String, String>();
        cookies.put("CP_COUNTRY ", "%7B%22country%22%3A%22DE%22%7D  ");
        cookies.put("CP_GEODATA ", "%7B%22location%22%3A-1%2C%22firstlocation%22%3A11%2C%22name%22%3A%22Hamburg%22%7D");
        String url = "https://www.cyberport.de/?token=7a2d9b195e32082fec015dca45ba3aa4&sSearchId=565eee12d987b&EVENT=itemsearch&view=liste&query=&filterkategorie=";
        Connection.Response res = Jsoup.connect(url).cookies(cookies).data("query", "4B05-525").execute();
        Document doc = res.parse();
        String tester = doc.select("span[id=articlePrice] > span[class=basis fl]").text();
        String tester2 = doc.select("span[id=articlePrice] > span[class=decimal fl]").text();
        System.out.println(tester + tester2 + " €");
    }
}

我现在回来的价值是2,90欧元,但应该是4,90欧元。我已经尝试了所有的东西,并在互联网上搜索了很多,但我没有找到适合我的任何解决方案。

这是我收到的价格的文章:     https://www.cyberport.de/micro-usb-2-0-kabel-usb-a-stecker-micro-b-stecker-0-5m--4B05-525_9374.html

我正在努力收到德国汉堡商店的价格。

您可以在顶部看到我设置的Cookie。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

区域信息似乎存储在会话中,区域代码在您选择时会在帖子中发送到服务器。

然后您需要执行以下步骤:

  • 使用所需区域执行POST
  • 获取会话Cookie
  • 使用这些厨师做原始POST
  • 希望得到正确的结果

这是代码

public static void main(String[] args) throws Exception {
    Connection.Response res;

    //11 is for Hamburg
    String zoneId = "11";

    //Set the zone and get the session cookies
    res = Jsoup.connect("https://www.cyberport.de/newajaxpass/catalog/itemlist/0/costinfo/" + zoneId)
            .ignoreContentType(true)
            .method(Method.POST).execute();

    final Map<String, String> cookies = res.cookies();
    //print the cookies, we'll see session cookies here
    System.out.println(cookies);

    //If we use that cookies, your code runs Ok
    String url = "https://www.cyberport.de/?token=7a2d9b195e32082fec015dca45ba3aa4&sSearchId=565eee12d987b&EVENT=itemsearch&view=liste&query=&filterkategorie=";
    res = Jsoup.connect(url).cookies(cookies).data("query", "4B05-525").execute();

    Document doc = res.parse();
    String tester = doc.select("span[id=articlePrice] > span[class=basis fl]").text();
    String tester2 = doc.select("span[id=articlePrice] > span[class=decimal fl]").text();
    System.out.println(tester + tester2 + " €");

    //Extra check
    System.out.println(doc.select("div.townName").text());
}

你会看到:

{SERVERID=realmN03, SCS=76fe7473007c80ea2cfa059f180c603d, SID=pphdh7otcefvc5apdh2r9g0go2}
4,90 €
Hamburg

我希望,这是理想的结果。