【问题标题】:Send Input to a PHP screen from Java从 Java 向 PHP 屏幕发送输入
【发布时间】:2014-06-19 14:29:59
【问题描述】:

我想将数据从 Java 发送到 PHP 页面。我用谷歌搜索了一下,但我发现的代码在这里不起作用是我使用的代码示例:

URL url = new URL("http://test.PHP");    
    URLConnection con = url.openConnection(); 
    con.setDoOutput(true);     
    PrintStream ps = new PrintStream(con.getOutputStream()); 
    ps.print("userid=12345");     
    ps.print("&password=Test");
    con.getInputStream();       
    ps.close(); 

我需要做的是在页面上输入用户名和密码,让 PHP 页面接受输入并实际运行登录功能(模拟用户按下按钮)。

谢谢 乌尔里希

【问题讨论】:

  • input a username and password on the page 是什么意思,你是要发出 POST 请求还是什么?
  • stackoverflow.com/questions/1359689/… - 关于如何发送查询字符串也有一个很好的答案。
  • 这个答案在stackoverflow上:stackoverflow.com/questions/2793150/…
  • Java & HTTP ?我只有一件事要说:Apache HttpClient
  • 这其实和PHP无关;您正在尝试以编程方式登录网页。它由 PHP 支持这一事实并不会改变您的任何事情。

标签: java http


【解决方案1】:

当我们尝试使用代码来模拟在浏览器中完成的操作时,Java 世界中最好的 API 之一是 HTTPClient,它为您提供了许多使您的代码在浏览器前充当用户的功能(填写输入,单击,加载链接...)。 here is a good tutorial 开始。

但如果您只想使用标准的 Java API 而没有任何第三方库,这里有几行希望对您有所帮助:

首先尝试在 url 中指定域名和您在请求服务器 ex 时要调用的页面:

URL url = new URL("http://www.mydomaine.com/test.PHP");    

如果网站在尝试访问时显示验证登录/通过的弹出窗口,请尝试使用此 url:

URL url = new URL("http://login:password@www.mydomaine.com/test.PHP");    

如果它向您显示一个登录表单并且您尝试访问是通过发送您的登录信息并像您填写输入一样传递,那么第一件事就是确定我们发送请求时将使用的输入名称服务器,可能是loginpassword 或其他名称,要找到这些名称尝试从浏览器检查页面(查看页面的源代码或尝试检查 HTML 元素),您会发现如下内容:

<form action="login.php" method="POST">
  <input type="text" name="my_login">
  <input type="password" name="my_password">
</form>

假设名称是 my_loginmy_password ,在这种情况下,您必须调用的页面是 login.php (这是操作表单的值),您的代码将是:

    URL obj = new URL("http://www.mudomaine.com/login.php);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    con.setRequestMethod("POST"); 
    String datas = "my_login=Administrator&my_password=s3cred0n3";
    con.setDoOutput(true);
    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.writeBytes(datas);
    wr.flush();
    wr.close();

如果你想管理服务器结果,你可以通过调用con.getInputStream()来处理结果。

但我会再重复一遍,如果您可以使用第三个库,请使用它,因为它简化了工作,并减少了代码中可能出现的错误。

【讨论】:

  • 嗨,好的,非常感谢您的详细回复。我理解你所说的一切,我认为我的代码正在做同样的事情问题是它实际上并没有登录并从“登录”页面更改为网站的“主页”,而只是在后台登录而不是更改网站页面。
  • 登录后你想做什么?
  • 我只想显示“主页”。我的应用程序正在打开并登录到一组预先选择的程序。所以登录后我需要做的就是显示下一页,即“主页”。
  • 所以使用你的代码我得到以下错误: java.lang.ClassCastException: sun.net.www.protocol.http.HttpURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection
  • 我要访问的网站如下:rccpdems01/TELEB/Login.php
猜你喜欢
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2022-01-23
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
相关资源
最近更新 更多