NVR800 HttpCliebt Digest鉴权

参考链接:
https://blog.csdn.net/LZHH_2008/article/details/127266312
https://www.cnblogs.com/liyuanhong/p/16007750.html

pom 文件引入 HttpClient5

        <dependency>
            <groupId>org.apache.httpcomponents.client5</groupId>
            <artifactId>httpclient5</artifactId>
            <version>5.2</version>
        </dependency>

  

鉴权

package com.lv.controller.yzsba;

import com.alibaba.fastjson.JSONObject;
import org.apache.hc.client5.http.ContextBuilder;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.core5.http.ClassicHttpResponse;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.message.StatusLine;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.TrustStrategy;

import javax.net.ssl.SSLContext;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import static org.apache.hc.client5.http.impl.classic.HttpClients.createDefault;

public class Test {
    public static void main(String[] args) throws Exception {
        getLoginRes();
    }
    /** 解决ssl报错问题,信任所有证书 */
    public static CloseableHttpClient createSSLClientDefault() {
        try {
            SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
                // 信任所有
                @Override
                public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                    return true;
                }
            }).build();
            SSLConnectionSocketFactory sslFactory = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
            HttpClientConnectionManager connMgr = PoolingHttpClientConnectionManagerBuilder.create().setSSLSocketFactory(sslFactory).build();
            return HttpClients.custom().setConnectionManager(connMgr).setUserAgent("MyService").build();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyStoreException e) {
            e.printStackTrace();
        }
        return createDefault();

    }

    /** 获取登陆后的cookie和cookie */
    public static JSONObject getLoginRes() throws Exception {

        try (final CloseableHttpClient httpclient = createSSLClientDefault()) {

            final HttpHost target = new HttpHost("https", "192.168.0.100", 443);
            final HttpClientContext localContext = ContextBuilder.create()
                    .useCredentialsProvider(CredentialsProviderBuilder.create()
                            .add(target, new UsernamePasswordCredentials("username", "password".toCharArray()))
                            .build())
                    .build();

            final HttpPost httpPost = new HttpPost("https://192.168.0.100/API/Web/Login");

            System.out.println("Executing request " + httpPost.getMethod() + " " + httpPost.getUri());
            ClassicHttpResponse res = httpclient.execute(httpPost, localContext, response -> {
                System.out.println("----------------------------------------");
                System.out.println(httpPost + "->" + new StatusLine(response));
                EntityUtils.consume(response.getEntity());
                return response;
            });

            if (res.getCode() == 200) {
                String cookie = res.getHeader("Set-Cookie").getValue();
                System.out.println(cookie.substring(0, cookie.indexOf(";")));
                System.out.println(res.getHeader("X-csrftoken").getValue());
            } else {
                System.out.println(res.getCode() + " " + res.getReasonPhrase());
            }
        }
        return null;
    }
}

  

posted @ 2022-11-25 16:19  黑白吖  阅读(118)  评论(1编辑  收藏  举报
TOP