Java 如何创建登录的POST请求?

Java 如何创建登录的POST请求?,java,http-post,httpurlconnection,Java,Http Post,Httpurlconnection,正如您在这里看到的代码,我正在尝试创建一个对网站管理面板的POST请求。但是,我想让它登录,所以它打印出“管理仪表板” 我已经试了两个多小时了,但我做不到。尽管如此,这在Java中是可能的吗?正如我在您的网站上发布的那样,您可以使用它来避免编写所有这些代码。显示了登录的示例 现在,由于URL位于参数中,所以这里的请求看起来像GET请求 import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt

正如您在这里看到的代码,我正在尝试创建一个对网站管理面板的POST请求。但是,我想让它登录,所以它打印出“管理仪表板”

我已经试了两个多小时了,但我做不到。尽管如此,这在Java中是可能的吗?

正如我在您的网站上发布的那样,您可以使用它来避免编写所有这些代码。显示了登录的示例

现在,由于URL位于参数中,所以这里的请求看起来像GET请求

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

/**
 * Created by Kevin on 26/01/14.
 */
public final class Boot {

   public Boot(final String... args) {
       try {
           final URL url = new URL(args[0]);
           HttpURLConnection connection = (HttpURLConnection) url.openConnection();

           connection.setDoOutput(true);
           connection.setRequestMethod("POST");
           connection.addRequestProperty("Host", "http://example.com/");
           connection.addRequestProperty("Protocol", "HTTP/1.1");
           connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0");
           connection.addRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
           connection.addRequestProperty("Referer", "http://example.com/");
           connection.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
           connection.addRequestProperty("Cookie", "__cfduid=d2f9cfb1c350013cc71a12eaedc660a551390762958146; __utma=241386960.1917361281.1390762966.1390762966.1390762966.1; __utmb=241386960.1.10.1390762966; __utmc=241386960; __utmz=241386960.1390762966.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)");

           String encodedParams = URLEncoder.encode("login=true&email=kevin@example.com&pwd=mypassword");

           OutputStream wr = connection.getOutputStream();
           wr.write(encodedParams.getBytes());
           wr.flush();
           wr.close();

           final InputStreamReader isr = new InputStreamReader(connection.getInputStream(), "UTF-8");
           final BufferedReader br = new BufferedReader(isr);

           String line;
           while ((line = br.readLine()) != null) {
               System.out.println(line);
           }
           System.out.println("Response code: " + connection.getResponseCode());
           System.out.println(encodedParams);

       } catch (IOException e) {
           e.printStackTrace();
       }
   }

    public static void main(final String... args) {
        new Boot("https://www.example.com/admin/index.php");
    }
}

或者,你也可以试试图书馆。

有人有什么想法吗?你想用这个实现什么?您的管理仪表板是一个网页,而不是一个web服务。你想做某种遥控吗?然后使用Web驱动程序或Selenium。否则,请为管理应用程序查找XML-RPC或REST接口。如果您仍然坚持反对/admin和HttpURLConnection,请使用
CookieManager
,不要对整个查询字符串进行编码,而只对参数进行编码,省去
Host
Protocol
头。更好地使用抽象库(HTTP客户端)。管理面板是如何保护的?基本身份验证或某种自定义登录表单?它是一种基本登录表单。
String encodedParams = URLEncoder.encode("login=true&email=kevin@example.com&pwd=mypassword");