java - 知道要发送到服务器的 header

标签 java header jsoup

在此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 步:仔细调查表单并记录所有输入字段(包括隐藏字段)。您需要知道所有字段的 namevalue。您还需要知道表单请求是在 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.aspxuserAgent 告诉服务器您的浏览器详细信息,data 是您放置表单中所有输入字段的名称和值对的位置。 cookies 是你放cookies的地方,你需要检查你的请求是否需要服务器接受cookies,这可以在“cookies”部分的网络选项卡中检查(如果不需要cookies) , 删除 cookies 行)。 method 指定您的请求方法。

检索到的 res 对象将包含您需要的所有信息、html、cookie 和所有内容。

这些只是一般化的步骤。您可能需要根据需要添加更多代码,但基本上这是您处理请求和服务器的方式。

更新

我看到您正在传递 cookie 的硬编码字符串值,我相信这是您遇到问题的原因。你如何检索你的cookies?每次您发出请求或登录时,您 session 的 Cookie 都会更改,您应该动态保存和传递您的 Cookie。

您可以通过调用 res.cookies()

获取您的 cookie

关于java - 知道要发送到服务器的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32590398/

相关文章:

android - 如何在显示到 Android 中的 webview 之前清除 html 页面?

java - 使用 Partition 在列表中找到第 K 个最小的元素 - 帮助我理解

java - Tween 引擎还是 Scene2d Action ?

wpf - TabControl.ItemTemplate : set TabItem. Header.Text 到带有 StringFormat 的多重绑定(bind)

node.js - 从 MJPEG 流中提取 JPEG 并通过 websocket 发布 base64 编码图像

html - 将导航栏放在标题底部

java - 如何使用 Jsoup 获取脚本的一部分

java - 使用 Jsoup 和 Java 查找网页表中的值,其中所有内容都有 "td"标记

java - JDBC 连接池监控 GlassFish

java - 我怎样才能使自定义资源也被 java :com/env-scheme? 在 glassfish 中查找