使用JSoup登录网站,可以吗?

桑德拉·伯格

是否可以使用 JSOUP 登录使用 csrf 令牌的网站?我尝试登录的网站是 aliexpress.com。似乎有很多输入值,我注意到 csrf 令牌在每次尝试时都会发生变化。我猜这些是阻止垃圾邮件的保护措施。我对 html 很陌生,想知道是否可以登录到这样的网站?谢谢

这是我的代码,以防万一我做错了:

public static void main(String[] args) throws IOException {

     Connection.Response loginForm = Jsoup.connect("http://login.aliexpress.com")
        .method(Method.POST)
            .data("cookieexists", "false")
            .data("loginId", "[email protected]")
            .data("password", "xxxxxx")
            .data("event_submit_do_login", "submit")
            .data("submit-btn", "Sign In")
            .data("appName", "aebuyer")
            .data("appEntrance", "default")
            .data("_csrf_token", "vdspQZH4cMoQT6GxLyU0a7")
            .data("rdsToken", "")
            .data("cid", "a832dd6d-990f-44eb-8bdb-9ec49d1c0a99")
            .data("umidToken", "4e6219e38c34346dc2bb7914a54794aac7645e7b")
            .data("lang", "en_us")
            .data("hsid", "VP4zHOZfVs1Ec4qqEsI1mA")
            .data("isRDSReady", "false")
            .data("isUMIDReady", "false")
            .data("umidGetStatusVal", "")
            .data("bizParams", "")
            .data("isRequiresHasTimeout", "false")
            .data("loginHost", "https://passport.aliexpress.com/")
            .data("scene", "")
            .data("isMobile", "false")
            .data("modulus", "d3bcef1f00424f3261c89323fa8cdfa12bbac400d9fe8bb627e8d27a44bd5d59dce559135d678a8143beb5b8d7056c4e1f89c4e1f152470625b7b41944a97f02da6f605a49a93ec6eb9cbaf2e7ac2b26a354ce69eb265953d2c29e395d6d8c1cdb688978551aa0f7521f290035fad381178da0bea8f9e6adce39020f513133fb")
            .data("exponent", "10001")
            .data("ua","099#KAFEx7E+TEGE6YTLEEEEE6twSXLoZ6NHDu3YS6tqDywMC6t3gR9YLfD1SryM4MDFYuJoV6t1YRB7n6f1Ych6n6g1DRJo+xqTETFUEcZt288mby1PYPrfds1gLjdTEEi5DEEErGFEHCLlhRaTG9llEJIm/KRlbpZV8MixZy164GFEJFwlsyaDMOcmby1TSV3WPy1tY0s3YuaHLyZTvbd9E7EFD67EEKqTETAEluZdtkH7NyhGYfciuOkG/MhXaQ3bAMZtY0s3JGFET6i5EE1iE7Eo73lP/3m4NVkAbIJi4leDbRZTvbuwsqk6/MhXaCqTETfEEcZt9CXmby1PYPrfds1tYo8XCV/zLybTETDElapdLIallGEeOOCxls1Pr08FSP8zYovKZMRc41qTETFUEcZt9Scmby1PYPrfds1gLioTETzElsXdLUQEWECmYKhMtV8gPy1fnM9SZyvHLioTETYQldXd7FEEVcCmYKhMtV8gPy1XC0ysUoSnE7EiK3l6/wqaEcExOMRyv9cGNyvHYp5TEEi5D7EE/GFETJDovl8JE7hMDwGEmba3U61vv0XBaYevDpiRciUt1OLjbo4Qc7rczQ8nZR2Bw7CWSQ/vPsqqi9exUqZ96Yz6bQWAnWuWLLrDA2iebRMREyB7Pbcdb4QsPok4QioWiYeWZyhqqOKR1eJ6UI2Vcgw6bXkPnypX1YuYalp7Pwnh1eyJroeXFSZ6UcCsZLpzLUZ1WsJhvLqpa291dzCncU7RbohMtscSi7hYSeJFFsxcTy/0/fhCv4bprqrANa2n+GCWds166OIp+WJFrtSSPFnRrVs8SAUM+GZDnR+kbyo6cWyIbISMHG1uVPybZz4M/vl4DXym8jvqaWw7zVZBNdZ6bteWNREZwErbnpywry4t+O/kuV8W/EPcuzpYa0uVaYnzZuB5hg9ulrimV65MJwnuV6i4DTY03BlWaccJ8ypu9u2A8WWzPMIszbcYDi4nEoCYDpiB4gvl9zkGVPq0IlbuQfcxVyrs37eQSyJKcw4RLeXKPt+Z4LslVewCYREnCQZVgcx+hz+l/ri5Vfx+8IRuNP94S0Yo3/sLDVwjvK4l7uyxOGFETYilssn1dASTEELlluaLom7wxeSTE1LlluZdt3illllls3aSt3t3llle33iSw6alluUdt37q33llWLaStEGde7FE5YHKJ7ThVa6o3kskwmyV0HUC6Df39yzU0xEG1DN7Vafo3kikLw+IRhj2qbAB6OT2qago1DN7VaTo3kikawWIRhj2qoAB6OT2qafo1DN7VmGtI8EJE7EhlAaP/3iSJGFET6i5EE1mE7EFlllbrxqTETFUluZdDWkmby1PYPrfds1gLioTETYQltCdBHGEV38mYKhMtV8gPy1XC0ysUoSnE7EB63l7/h6LEc7JNM1j83X0UykG+qxEdUF9E7EFD67EE1qTETFUluZt9CZmby1PYPrfds1gLjdTEEi5DEEE4GFEJFwlsyaD0Lxmby1TSV3WPy1tY0s3YuaHLyZTvbuiE7Eo73lP/3m+q0kAbIJi4leDbRZTvbuwsqk6/MhXaVqTETAEluZdtkpCNyhGYfciuOkG/MhXaQ3bAMZtY0s3IGFEHSwlsyDe2VkAbpZ1ZVnabRZTC0sR8u86")
            .followRedirects(true)
        .execute();

    // TODO code application logic here
    Document doc = loginForm.parse();



    System.out.print("website title:" + doc);
}

}

TDG

既然您知道要发送哪些参数,我假设您知道如何使用浏览器的开发人员工具,因此这对您来说很容易:
为了登录该站点,您必须执行两个步骤。第一步是发送GET请求并解析结果。第二步是发送一个POST请求,带有所需的参数,包括你从步骤 1 中获得的参数。
我已经看到,当将第一个get请求发送到https://login.aliexpress.com/ 时,结果是不包含 _csrf_token 等值。浏览器发送另一个请求到https://passport.aliexpress.com/mini_login.htm?lang=en_us&appName=aebuyer&appEntrance=default&styleType=auto&bizParams=¬LoadSsoView=false¬KeepLo​​gin=true&isMobile=false&rnd=0.9476178801629621所以你必须对最后一个参数进行同样的解析get 请求的一部分是一些随机数。我认为您也应该随机化字符串,不要一次又一次地使用相同的数字,这可能是某种保护措施):

String firstURL = "https://passport.aliexpress.com/mini_login.htm?lang=en_us&appName=aebuyer&appEntrance=default&styleType=auto&bizParams=&notLoadSsoView=false&notKeepLogin=true&isMobile=false&rnd=0.9476178801629621";
Connection.Response loginForm = Jsoup.connect(firstURL)
    .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0")    
    .method(Method.GET);

之后,您必须解析响应并提取参数,如下所示 -

Element e = doc.select("input[id=fm-cid]").first();
String cid = e.attr("value");

解析所有需要的值后,您可以发送POST请求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用jsoup登录网站

来自分类Dev

如何使用JSOUP登录网站?

来自分类Dev

使用printf可以吗?

来自分类Dev

使用pageswitch可以吗?

来自分类Dev

如何使用Jsoup登录HTTPS网站?

来自分类Dev

如何使用Jsoup登录网站(元刷新)?

来自分类Dev

使用Jsoup登录网站时遇到麻烦,

来自分类Dev

使用LinearLayout代替FrameLayout可以吗?

来自分类Dev

在<code>中使用<div>可以吗?

来自分类Dev

使用可以吗?每个方法

来自分类Dev

使用模块命名空间,可以吗?

来自分类Dev

JSoup登录到网站

来自分类Dev

登录网站?(Jsoup)

来自分类Dev

Keepass 2可以自动登录网站吗?

来自分类Dev

如何使用Jsoup登录我的大学网站?

来自分类Dev

获取使用 jsoup 登录网站后创建的 session id cookie

来自分类Dev

我无法使用 Jsoup 登录 Android 中的网站

来自分类Dev

我可以使用Heroku Piggyback SSL进行主要网站登录吗?

来自分类Dev

使用bx寄存器保存索引可以吗?

来自分类Dev

在JavaScript中使用名为“ arguments”的参数可以吗?

来自分类Dev

random_shuffle使用rand()可以吗?

来自分类Dev

网格布局-使用flexbox可以吗?

来自分类Dev

在Android之外使用Otto可以吗?

来自分类Dev

使用Python的SAP RFC服务器,可以吗?

来自分类Dev

使用正则表达式可以吗

来自分类Dev

使用InfoWindows的Javascript Google Maps Marker群集-可以吗?

来自分类Dev

对两个对象使用相同的VBO可以吗?

来自分类Dev

在循环条件下使用count($ arr)可以吗

来自分类Dev

始终使用较高的API级别可以吗?