我正在尝试将数据发布到网站上以使用Jsoup登录网站,但它不起作用?
我正在尝试代码
Document docs = Jsoup.connect("http://some.com/login")
.data("cmd", "login","username", "xxxx","password", "yyyyy")
.referrer("http://some.com/login/").post();
这里是在pagesource中提供正常的登录页面
我也试过了代码
Document docs = (Document) Jsoup.connect("http://some.com/login")
.data("cmd", "login","username", "xxxx","password", "yyyyy")
.referrer("http://some.com/login/").method(Method.POST).execute().parse();
这里也是在pagesource中再次登录的正常页面。
对此相关的任何建议都将受到高度赞赏!!
...谢谢
答案 0 :(得分:31)
我将举一个例子来回答你的问题。 假设您要登录Facebook。
除了用户名和密码之外,还有许多其他参数也通过POST
请求传递。这些所有参数都是隐藏的,并且像用户名和密码一样传递。
例如:
如果您要打开Facebook的html source
,那么您可以看到有一个隐藏的参数是lgnrnd
,其值为071129_5D7M
。
所以还有很多其他类似的参数。你需要传递所有的参数。
您还应指定userAgent.
Document doc = Jsoup.connect("http://www.facebook.com")
.data("email", "myemailid")
.data("pass", "mypassword")
// and other hidden fields which are being passed in post request.
.userAgent("Mozilla")
.post();
System.out.println(doc); // will print html source of homepage of facebook.
答案 1 :(得分:2)
如果问题是javascript重定向,您可以尝试进入javascript并检查它重定向到的URL是否是静态的,然后使用重定向来获取访问权限。我这样做是为了访问javascript制作的弹出框一次。
答案 2 :(得分:0)
发布数据也可以使用地图发送。看起来更加托管和整洁。网站有时会检查某些标头的存在,因此传递这些标头以使请求与应有的相似。大多数情况下,内容类型是预期的。
package test;
import java.util.HashMap;
import java.util.Map;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
/**
* POST example
*
* @author iampayload
*
*/
public class JsoupPost {
private final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:65.0) Gecko/20100101 Firefox/65.0";
private final String urlPost = "https://www.huawei.com/en/accounts/PersonalPost";
// main class
public static void main(String[] args) throws Exception {
JsoupPost http = new JsoupPost();
http.sendPost();
}
// HTTP Post request
private void sendPost() throws Exception {
Map<String, String> postData = new HashMap<>();
postData.put("username", "xxxx");
postData.put("cmd", "login");
postData.put("password", "yyyyy");
Document doc = Jsoup.connect(urlPost).ignoreContentType(true).userAgent(USER_AGENT).data(postData).post();
}
}