java - 登录http网站java

标签 java http

我第一次尝试登录 http 网站,但我很难理解发送参数的正确格式。我看过其他例子,但它们似乎对我不起作用,所以我想看看是否有人可以向我解释这一点。此时我的代码似乎什么也没做,但它是......

HttpURLConnection url= (HttpURLConnection)new URL("http://www.myameego.com/index2.php?do=login").openConnection();
url.setDoOutput(true);
url.setRequestMethod("POST");
OutputStreamWriter writer = new OutputStreamWriter(url.getOutputStream());
writer.write("X-Mapping-fjhppofk=6A991610BA398B3A39F4B491D5382BB4;
PHPSESSID=kbo25e08t3qvu08l1shkq8kk94; userName=coled; pass=ed45d626b07112a8a501d9672f3b92796a6754b8d8d9cb4c617fec9774889220; clientID=129; X-Mapping-fjhppofk=DCE62FE972E1EF2F12D0060EC74C3681; PHPSESSID=ukeo21oldb5pqsntu7kl8j3b96");
writer.flush();

我下载了一个 http 嗅探器,认为我可以读取浏览器发送的内容。这就是我得到 write() 行的方式,它是由资源管理器发送的 cookie。我还查看了登录屏幕的源代码,发现靠近底部的一段代码看起来负责登录。

http://www.myameego.com/index2.php?do=login

有人可以告诉我如何连接到这个界面吗?我不明白它是如何工作的。如果有帮助的话,这是我通过浏览器手动登录的完整数据包。我从我的 http 嗅探器中得到它。

Host Name: www.myameego.com
Method: POST
Path: /index2.php?do=login
User Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; NP06)
Response Code: 302
Response String: found
Content Type: text/html; charset=UTF-8
Referer: http://www.myameego.com/index.php?do=login
Transfer Encoding: chunked
Server: Apache
Content Length: 17817
Connection: Keep-Alive
Cache Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Location: /Ameego/index.php
Cookie: X-Mapping-fjhppofk=6A991610BA398B3A39F4B491D5382BB4; PHPSESSID=kbo25e08t3qvu08l1shkq8kk94; userName=coled; pass=ed45d626b07112a8a501d9672f3b92796a6754b8d8d9cb4c617fec9774889220; clientID=129; X-Mapping-fjhppofk=DCE62FE972E1EF2F12D0060EC74C3681; PHPSESSID=ukeo21oldb5pqsntu7kl8j3b96
URL: http://www.myameego.com/index2.php?do=login

如何制作像上面那样的数据包?任何指导将不胜感激。

我查看了您发布的链接,http 嗅探器显示正在调用 POST 请求,但 cookie 行与手动浏览器请求的行不匹配。

HttpURLConnection httpConnection = (HttpURLConnection)new URL("http://www.myameego.com/index2.php?do=login").openConnection();
    httpConnection.setDoOutput(true);
    httpConnection.setRequestMethod("POST");
    httpConnection.setRequestProperty("Accept-Charset","UTF-8");
    httpConnection.setRequestProperty("User-Agent","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; NP06)");
    httpConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
    String info = String.format("user=%s&coled=%s",URLEncoder.encode("user","UTF-8"),URLEncoder.encode("coled","UTF-8"));
    info += String.format("pass=%s&MYPASS=%s",URLEncoder.encode("pass","UTF-8"),URLEncoder.encode("MYPASS","UTF-8"));
    info += String.format("clientID=%s&129=%s",URLEncoder.encode("clientID","UTF-8"),URLEncoder.encode("129","UTF-8"));
    info += String.format("login=%s&Sign In=%s",URLEncoder.encode("login","UTF-8"),URLEncoder.encode("Sign In","UTF-8"));
    httpConnection.setRequestProperty("Cookie",info);
    OutputStream output = httpConnection.getOutputStream();
    output.write(info.getBytes("UTF-8"));
    int x;
    while((x = httpConnection.getInputStream().read()) != -1)System.out.print((char)x);

我的 cookies : user=user&coled=coledpass=pass&MYPASS=MYPASSclientID=clientID&129=129login=登录&Sign In=登录+登录

浏览器cookie:
X-映射-fjhppofk=6A991610BA398B3A39F4B491D5382BB4; PHPSESSID=112tg9i4afau5i382hui705553

有人知道我在这里可能缺少什么吗?

最佳答案

使用 Jsoup 应该像这样简单:

Connection.Response response = Jsoup.connect("http://www.myameego.com/index2.php?do=login")
        .method(Connection.Method.GET)
        .execute();

Document page = Jsoup.connect("http://www.myameego.com/index2.php?do=login")
        .data("user", "login")
        .data("pass", "password")
        .data("clientID", "123456")
        .cookies(response.cookies())
        .post();

Google Chrome Developer Tools 收集

request

cookies used

关于java - 登录http网站java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16372693/

相关文章:

node.js - 通过长时间运行的后台工作防止 HTTP 请求超时

http - 不同浏览器中 URL 的最大长度是多少?

java - 如何在给定的搜索中加载相应的数据

node.js - 如何将 websocket 连接代理到 NodeJS 中的其他 websockets

c# - 当参数直接定义为方法参数而不是模型时,IHttpActionResult 结果无法绑定(bind)请求正文参数

java - Selenium 多次点击

javascript - mainWindow.loadURL ("https://localhost:3000/") 在 Electron 应用程序上显示白屏

java - 我如何从网站提取一些数据并通过电子邮件发送

java - 如何隐藏底部导航栏?

java - Java/Scala 中类似 Scipy 的功能?