在此website ,你可以输入你的学生卡号,然后它会显示卡上还剩多少钱。是否有可能在 java 中使用 JSOUP?将卡号发送到服务器时,我如何知道应该使用什么 header 等?当我使用 chrome 开发者工具时,我得到了关于标题的信息,看起来像这样
Remote Address:95.80....
Request URL:http://kortladdning3.chalmerskonferens.se/CardLoad_Order.aspx
Request Method:GET
Status Code:200 OK
Response Headers
view source
Cache-Control:private
Content-Length:6807
etc...
我能以某种方式使用这些信息吗?
所以基本上我想要的是使用 JAVA 获取剩余的金额。
编辑:
这是我当前的代码:
res = Jsoup.connect(url)
.userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36")
.data("txtCardNumber", "3819xxxxxxxxxx")
.data("__VIEWSTATE", "balbalblaonglong")
.data("__EVENTVALIDATION", "/wEWBAKG7bXPBQLi0uqnCgKF69rWBAK14fOOCgrUt4CBVP4K0VKe0uOPxLSAu26y")
.data("hiddenIsMobile", "desktop")
.cookie("ASP.NET_SessionId", "kcvawxel4bzg3yqotr22b1ig")
.method(Method.GET)
.execute();
这给了我这个错误:
HTTP error fetching URL. Status=500, URL=http://kortladdning3.chalmerskonferens.se/CardLoad_Order.aspx?txtCardNumber=3819276248836621&__VIEWSTATE=%2FwEPDwUHNjA4NDA1NQ9kFgQCAw9kFgoCAQ9kFgICAQ8PFgIeBFRleHQFClBUTSBLb3J0bnJkZAICDxYCHgdWaXNpYmxlaGQCAw8WAh8BaGQCBA8WAh8BaGQCBQ8WAh8BaBYCAgEPEGRkFgBkAgUPDxYCHwAFCShkZXNrdG9wKWRkZGzBhwMIv3yxqKnC0C7%2BPlC0PlDG&__EVENTVALIDATION=%2FwEWBAKG7bXPBQLi0uqnCgKF69rWBAK14fOOCgrUt4CBVP4K0VKe0uOPxLSAu26y&hiddenIsMobile=desktop
如果我只有 .data("txtCardNumber", "3819276248836621")
,我不会得到错误,但我没有得到正确的站点(它基本上说错了卡号)。有什么建议吗?
编辑 2: 现在有点用了。如果我添加更多 cookie 信息,它会显示我还剩多少钱(太棒了!)。但是,如果我更改卡号(给我的 friend ),我仍然会得到我自己卡上剩余的金额。我想这与 cookies 有关?添加新 cookie session 的任何提示?
编辑 3: 现在我在发送数据之前获取 cookie,但它仍然不起作用。我尝试发送编码和解码的数据,但没有任何效果。
url = "http://kortladdning3.chalmerskonferens.se/CardLoad_Order.aspx";
Connection.Response loginForm = Jsoup.connect(url)
.method(Connection.Method.GET)
.execute();
Document document = Jsoup.connect(url)
.userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36")
// .data("__VIEWSTATE","%2FwEPDwUHNjA4NDA1NQ9kFgQCAw9kFgoCAQ9kFgICAQ8PFgIeBFRleHQFClBUTSBLb3J0bnJkZAICDxYCHgdWaXNpYmxlaGQCAw8WAh8BaGQCBA8WAh8BaGQCBQ8WAh8BaBYCAgEPEGRkFgBkAgUPDxYCHwAFCShkZXNrdG9wKWRkZGzBhwMIv3yxqKnC0C7%2BPlC0PlDG")
.data("__EVENTVALIDATION", "%2FwEWBAKG7bXPBQLi0uqnCgKF69rWBAK14fOOCgrUt4CBVP4K0VKe0uOPxLSAu26y")
.data("hiddenIsMobile", "desktop")
.data("txtCardNumber", "xxxxxxxxxxxx")
.data("SavedCardNumber", "")
.data("btnNext","N%C3%A4sta")
.cookies(loginForm.cookies())
.get();
最佳答案
您绝对可以为此使用 Jsoup。事实上,我已经使用 Jsoup 成功地从图书馆网站检索用户信息。无论如何,我会向您提供完成此任务所遵循的步骤。
第1步:您输入的学生证号码应该是一个表格的输入。因此,只需右键单击您输入学号的区域并选择 Inspect Element
。在那里您将能够检查输入和表单的属性。
第 2 步:仔细调查表单并记录所有输入字段(包括隐藏字段)。您需要知道所有字段的 name
和 value
。您还需要知道表单请求是在 GET
还是 POST
中发出的。
第 3 步:现在让我们进入有趣的部分。使用以下代码片段向服务器发出请求并检索表单。
Connection.Response res = Jsoup.connect(url)
.userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36"
.data(inputName1, inputValue1
inputName2, inputValue2)
.cookies(cookies) //do not add this line if no cookies are required
.method(Method.GET)
.execute();
url
是请求地址,在您的情况下为 http://kortlaaddning3.chalmerskonferens.se/CardLoad_Order.aspx
。 userAgent
告诉服务器您的浏览器详细信息,data
是您放置表单中所有输入字段的名称和值对的位置。 cookies
是你放cookies的地方,你需要检查你的请求是否需要服务器接受cookies,这可以在“cookies”部分的网络选项卡中检查(如果不需要cookies) , 删除 cookies 行)。 method
指定您的请求方法。
检索到的 res
对象将包含您需要的所有信息、html、cookie 和所有内容。
这些只是一般化的步骤。您可能需要根据需要添加更多代码,但基本上这是您处理请求和服务器的方式。
更新
我看到您正在传递 cookie 的硬编码字符串值,我相信这是您遇到问题的原因。你如何检索你的cookies?每次您发出请求或登录时,您 session 的 Cookie 都会更改,您应该动态保存和传递您的 Cookie。
您可以通过调用 res.cookies()
关于java - 知道要发送到服务器的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32590398/