https发布失败而http发布成功与java中几乎相同的代码片段?

时间:2017-08-21 05:06:50

标签: java https

服务器支持http和https服务。我想通过java设置访问密码。我遇到的问题是我设法使用http执行此操作但使用https失败。除了不同的协议,我使用相同的代码。以下是我设置密码的代码:

    //url = new URL("http://172.20.1.80/password");
    //HttpURLConnection connection = setHttpConnect((HttpURLConnection) url.openConnection()); 
    url = new URL("https://172.20.1.80/password");
    HttpsURLConnection connection = setHttpsConnect((HttpsURLConnection) url.openConnection()); 
    sc = SSLContext.getInstance("TLS");
    sc.init(null, new TrustManager[] { new MyTrust() }, new java.security.SecureRandom());
    connection.setSSLSocketFactory(sc.getSocketFactory());

    connection.setDoInput(true);
    connection.setDoOutput(true);
    StringBuffer set = new StringBuffer();
    newpw = "123456"; 
    boundary = "----abc123abc1234-java";
    set.append(boundary + "\r\n").append("Content-Disposition: form-data; name=\"pw\"\r\n\r\n")
            .append(newpw).append("\r\n" + boundary + "--\r\n")
            .append("Content-Disposition: form-data; name=\"con_pw\"\r\n\r\n").append(newpw)
            .append("\r\n" + boundary + "--\r\n");
    out = new PrintWriter(connection.getOutputStream());
    out.write(set.toString());
    out.flush();

    in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
    while ((str = in.readLine()) != null) {
        result += (str + "\n");
        if (str.indexOf(pwSet) != -1) {
            succ += 1;
            setPwSucc = true;
        }
    }

这是连接属性:

private static HttpsURLConnection setHttpsConnect(HttpsURLConnection c) {
    c.setRequestProperty("User-Agent", "java");
    c.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    c.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
    c.setRequestProperty("Accept-Encoding", "gzip, deflate");
    c.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
    c.setConnectTimeout(timeout); // timeout
    c.setReadTimeout(timeout);
    return c;
}
private static HttpURLConnection setHttpConnect(HttpURLConnection c) {
    c.setRequestProperty("User-Agent", "sxf");
    c.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    c.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
    c.setRequestProperty("Accept-Encoding", "gzip, deflate");
    c.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
    c.setConnectTimeout(timeout); // timeout
    c.setReadTimeout(timeout);
    return (HttpURLConnection) c;
}

X509的设置:

public class MyTrust implements X509TrustManager{
    public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
    public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
    public X509Certificate[] getAcceptedIssuers() {return null; }   
}

服务器可以通过网页打印一些日志,这里是单独的日志:

//Log when https in use:
Length of RcvBuf: 336
This is RcvBuf: 
POST /password HTTP/1.1 User-Agent: java Accept: text/html,application/xhtml+xml,app 
lication/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding 
: gzip, deflate Content-Type: multipart/form-data; boundary=----abc123abc1234-java Host: 172.20.1 
.80 Connection: keep-alive Content-Length: 203 

//Log when http in use:
Length of RcvBuf: 520
This is RcvBuf: 
POST /password HTTP/1.1 User-Agent: sxf Accept: text/html,application/xhtml+xml,appl 
ication/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: 
gzip, deflate Content-Type: multipart/form-data; boundary=----abc123abc1234-java Host: 172.20.1. 
80 Connection: keep-alive Content-Length: 203 ----abc123abc1234-java Content-Disposition: for 
m-data; name="pd" 123456 ----abc123abc1234-java-- Content-Disposition: form-data; n 
ame="conpw" 123456 ----abc123abc1234-java-- 

似乎在使用 HTTPS 时,服务器不接受我的数据。

但有一件事让我更加困惑:在服务器上有另一个操作,在执行之前,将检查密码。使用另一个密码正确的密码(密码通过chrome设置),我可以执行此操作。如果代码有助于分析问题,请评论。

任何人都可以帮助我使https工作吗?我的第二个问题是,由于我在网页上打印的日志没有得到任何结果,Content-Length: 203中的 203 是什么? 提前谢谢大家!

0 个答案:

没有答案