当前位置: 首页 > 知识库问答 >
问题:

Jsoup 无法登录以建立 Cookie

邢华清
2023-03-14

因此,我已经阅读了所有关于创建会话和自动登录的jsoup文章。阅读有关cookie问题的问题。因此,使用所有这些示例,我创建了一些JAVA代码来登录到特定站点。但每次我登录或尝试登录时,我都会被重定向回登录页面。

  1. 使用loginForm我获得所需的cookie
  2. 然后我使用Forms操作URL发布我的登录信息
  3. 然后我应该登录,但它是重新定向到登录。我可以在loginDoc对象解析中看到这一点。

问题是,我在尝试登录此特定站点时做错了什么?

package com.auction.estimates.utils.scraper;

import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.jsoup.Connection;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpResponse;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;

public class GatherData {

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

    Response loginForm = Jsoup
            .connect(
                    "https://www.rbauction.com/myaccount?redirect=/home/auth")
            .userAgent(
                    "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0")
            .maxBodySize(0)
            .timeout(600000)
            .method(Connection.Method.GET)
            .execute();

    Document formDoc = loginForm.parse();
    Elements forms = formDoc.select("form");
    Element elemForm = forms.first();
    String urlAction = elemForm.attr("action");

    Response login = Jsoup
            .connect(
                    "https://www.rbauction.com" + urlAction)
            .data("_58_redirect", "%2Fhome%2Fauth&")
            .data("_58_rememberMe", "false")
            .data("_58_breakpoint","null")
            .data("_58_login", "myEmail")
            .data("_58_password", "myPass")
            .data("_58_rba-login-submit", "Sign+In")
            .cookies(loginForm.cookies())
            .userAgent(
                    "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0")
            .followRedirects(true)
            .method(Connection.Method.POST).execute();

    Document loginDoc = login.parse();
    Map<String, String> loginCookies = login.cookies();

    String url = "https://www.rbauction.com/2006-caterpillar-303-5ccr?invId=4322220&id=ar";
    Document doc = Jsoup
            .connect(url)
            .cookies(loginCookies)
            .userAgent(
                    "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0")
            .followRedirects(true).get();

    Elements links = doc.select("a[href]");

    System.out.println("What do we have.");
}

}
html prettyprint-override">	<form name="_58_fm" method="post" action="/myaccount?p_auth=rlOiteI3&amp;p_p_id=58&amp;p_p_lifecycle=1&amp;p_p_state=normal&amp;p_p_mode=view&amp;p_p_col_id=column-1&amp;p_p_col_count=2&amp;saveLastPath=0&amp;_58_struts_action=%2Flogin%2Flogin" id="yui_3_4_0_6_1415034856663_348">
		<input type="hidden" value="/home/auth" id="_58_redirect" name="_58_redirect">	   
		<input type="hidden" value="true" id="_58_rememberMe" name="_58_rememberMe">
		<input type="hidden" value="null" id="_58_breakpoint" name="_58_breakpoint">
		
		<div class="rba-input-line">
			<label for="_58_login">Email address</label>
			<input type="text" tabindex="1" autocomplete="off" maxlength="75" value="" name="_58_login" id="_58_login" class="rba-input ">
		</div>
		
		<div class="rba-input-line" id="yui_3_4_0_6_1415034856663_347">
			<label for="_58_password">Password</label> 
			<a class="rba-label-link float-right" target="_top" href="/myaccount/forgot-password">Forgot password?</a>
			<input type="password" autofocus="true" tabindex="2" autocomplete="off" maxlength="75" value="" name="_58_password" id="_58_password" class="rba-input rba-form-autofocus">
		</div>
		
		<div class="rba-input-line" id="rba-remember-me">
			<span class="rba-ico-inline-text-24">
				<input type="checkbox" tabindex="3" name="_58_chkRememberMe" id="_58_chkRememberMe" checked="checked" class="rba-input-checkbox">								
				<label for="_58_chkRememberMe">
					<span class="faux-a">Remember me</span>	
						&nbsp;<span class="rba-sprite rba-ico rba-ico-24 rba-ico-24-exclaimation">
						</span>
				</label>
			</span>
		</div>
		
		<div class="button-stack button-stack-horizontal-right hf-bottom-margin">
			<input type="submit" tabindex="4" title="Sign In" value="Sign In" id="_58_rba-login-submit" class="rba-button rba-btn-lvl-1">
		</div>
	</form>

共有2个答案

朱和惬
2023-03-14

所以我根本无法使用自动登录。但是这种数据收集可能每两周进行一次。所以为了解决这个问题,我登录了Mozilla,提取了我当前所有的rbauctions.com cookie。然后,我尝试设置JSESSIONID和USER并传递cookies。那也失败了。所以我手动将所有31个cookies及其内容复制并粘贴到一个HashMap中。

Map<String, String> loginCookies = new HashMap<String, String>();
    loginCookies.put("COOKIE_SUPPORT", "true");
    loginCookies.put("__CT_Data", "gpv=9&apv_9545_www09=9");
    loginCookies.put("WRUID", "0");
    etc......

在那之后,我可以访问该网站并删除我的数据。这并不理想,但至少我可以得到我的数据。

易祯
2023-03-14

你的代码给了我

HTTP error fetching URL. Status=404, URL=https://www.rbauction.com/home/auth&

如果您仅更改:

.data(“_58_redirect”, “/home/auth

它工作正常!

如果没有,请检查您的用户/凭证。

 类似资料:
  • 我正在尝试使用jsoup登录一个网站,我很确定我正在解析所有需要解析的东西,我只是不知道出了什么问题。 我用这个做参考:http://cs.harding.edu/fmccown/android/Logging-into-Pipeline.pdf 以下是我的AsycntTask doInBackground中的代码: 但问题是,当我登录时,它不包含页面的文档,它包含一个错误页面的文档,该页面只显示

  • 问题内容: 使用Jsoup登录网站需要什么?我相信我的代码是正确的,但是我从未使用Jsoup成功登录到网站,因此我可能会丢失一些东西。这是我的代码: 返回一个显示未成功登录的登录页面。有一个名为的输入值,我认为这可能是为什么它不起作用的原因。这个值会随着时间的推移而上升。我运行了两次代码,时间变量返回了和。我的代码需要大约10秒钟的时间来打印文档,因此,变量在发送发布请求时是否已经更改?我不确定这

  • 在登录时出现: 或 登录时如果出现上图的错误,通常有如下原因: 1、IIS没有正常启动。 正常启动应如下图所示: 2、服务器有防火墙,请关闭防火墙 或者 开放 80 端口(或你设置的其它的端口号)。 上图就是操作系统自带防火墙开放80端口的操作界面,如果有第三方的防火墙也必须这么做。 3、验证客户端与服务器的通讯是否正常,可以在客户机上打开IE浏览器,在地址栏中输入:http://网络服务器的IP

  • 问题内容: 我尝试使用我从已经发布的问题的答案中读取的这些行登录我的Facebook帐户,但无论如何我都无法登录!我正在寻找一些更正代码的提示: PS:不,我不想使用Facebook API! 问题答案: 在请求中传递了许多其他参数: 并且不要忘记参数。Facebook可能会为登录请求提供某种一次性令牌,以防止绕过Facebook API。

  • 问题内容: 如何通过jsoup登录? 我试过了,但是不起作用: 问题答案: 通常,登录网站需要两个步骤- 您发送请求以获取页面,然后从中提取一些值,例如会话ID等以及cookie。 您发送带有第1步中的值以及您的用户名和密码的请求。 要知道您需要发送哪些值,请在开发人员模式下使用浏览器(按F12键)并检查流量。更改字符串以匹配您的浏览器,因为某些站点将不同的页面发送到不同的客户端。

  • 我尝试使用这个简单的代码登录,但在我点击登录按钮后,else选项“无效用户名或密码!”总是出现,即使用户名和密码是匹配的 控制器: