Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpClient 4.3.4获取请求返回登录页面_Java_Selenium_Cookies_Apache Httpclient 4.x - Fatal编程技术网

Java HttpClient 4.3.4获取请求返回登录页面

Java HttpClient 4.3.4获取请求返回登录页面,java,selenium,cookies,apache-httpclient-4.x,Java,Selenium,Cookies,Apache Httpclient 4.x,我正在使用selenium登录一个网站,当它被登录后,我会执行一些任务。执行这些任务后,我必须下载并验证PDF文档的内容。由于selenium不支持下载文档,我决定使用ApacheHttpClient 4.3.4 我发现这个网站几乎涵盖了我认为GET请求所需的所有要点。在我实现此代码并将其更改为适用于HttpClient 4.3.4和我的网站后,我最终得到了以下代码: public void dowloadFile(String dowloadURL, String outputFileLoca

我正在使用selenium登录一个网站,当它被登录后,我会执行一些任务。执行这些任务后,我必须下载并验证PDF文档的内容。由于selenium不支持下载文档,我决定使用ApacheHttpClient 4.3.4

我发现这个网站几乎涵盖了我认为GET请求所需的所有要点。在我实现此代码并将其更改为适用于HttpClient 4.3.4和我的网站后,我最终得到了以下代码:

public void dowloadFile(String dowloadURL, String outputFileLocation, String outputFileName) throws Exception {
    SSLContextBuilder builder = new SSLContextBuilder();
    builder.loadTrustMaterial(null, new TrustStrategy(){
        public boolean isTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
                return true;
            }
        });
    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
            builder.build());

    CookieStore cookieStore = seleniumCookiesToCookieStore();

    CloseableHttpClient httpClient = HttpClients.custom()
            .setSSLSocketFactory(sslsf)
            .setDefaultCookieStore(cookieStore)
            .build();

    try {
        HttpGet httpget = new HttpGet(baseURL + dowloadURL);
        CloseableHttpResponse response = httpClient.execute(httpget);
        try {
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                File directoriesFile = new File(outputFileLocation);
                directoriesFile.mkdirs();
                File outputFile = new File(outputFileLocation + "\\" + outputFileName);
                InputStream inputStream = entity.getContent();
                FileOutputStream fileOutputStream = new FileOutputStream(outputFile);
                int read = 0;
                byte[] bytes = new byte[1024];
                while ((read = inputStream.read(bytes)) != -1) {
                    fileOutputStream.write(bytes, 0, read);
                }
                fileOutputStream.close();
                log.info("Downloaded " + outputFile.length() + " bytes. " + entity.getContentType());
            }
            else {
                log.warn("Download failed!");
            }
        } finally {
            response.close();
        }
    } finally {
        httpClient.close();
    }
}

private CookieStore seleniumCookiesToCookieStore() {
    Set<Cookie> seleniumCookies = this.driver.manage().getCookies();
    CookieStore cookieStore = new BasicCookieStore();

    for(Cookie seleniumCookie : seleniumCookies){
        BasicClientCookie basicClientCookie =
            new BasicClientCookie(seleniumCookie.getName(), seleniumCookie.getValue());
        basicClientCookie.setDomain(seleniumCookie.getDomain());
        basicClientCookie.setExpiryDate(seleniumCookie.getExpiry());
        basicClientCookie.setPath(seleniumCookie.getPath());
        cookieStore.addCookie(basicClientCookie);
    }
    return cookieStore;
}
public void dowloadFile(字符串dowloadURL、字符串outputFileLocation、字符串outputFileName)引发异常{
SSLContextBuilder=新的SSLContextBuilder();
builder.loadTrustMaterial(空,新TrustStrategy(){
已信任公共布尔值(X509Certificate[]链,字符串authType)
抛出证书异常{
返回true;
}
});
SSLConnectionSocketFactory sslsf=新SSLConnectionSocketFactory(
builder.build());
CookieStore CookieStore=硒尿CookieStoCookieStore();
CloseableHttpClient httpClient=HttpClients.custom()
.setSSLSocketFactory(sslsf)
.setDefaultCookieStore(cookieStore)
.build();
试一试{
HttpGet HttpGet=新的HttpGet(baseURL+dowloadURL);
CloseableHttpResponse response=httpClient.execute(httpget);
试一试{
HttpEntity=response.getEntity();
如果(实体!=null){
文件目录文件=新文件(outputFileLocation);
directoriesFile.mkdirs();
File outputFile=新文件(outputFileLocation+“\\”+outputFileName);
InputStream InputStream=entity.getContent();
FileOutputStream FileOutputStream=新的FileOutputStream(outputFile);
int read=0;
字节[]字节=新字节[1024];
而((read=inputStream.read(bytes))!=-1){
fileOutputStream.write(字节,0,读取);
}
fileOutputStream.close();
log.info(“下载的”+outputFile.length()+“字节”。+entity.getContentType());
}
否则{
log.warn(“下载失败!”);
}
}最后{
response.close();
}
}最后{
httpClient.close();
}
}
Seleniumcookiestookiestookiestore()私人烹饪店{
Set seleniumCookies=this.driver.manage().getCookies();
CookieStore CookieStore=新的BasicCookieStore();
用于(饼干硒蛋卷:硒蛋卷){
基本客户账户基本客户账户=
新的BasicClientCookie(seleniumCookie.getName(),seleniumCookie.getValue());
basicClientCookie.setDomain(seleniumCookie.getDomain());
basicClientCookie.setExpiryDate(seleniumCookie.getExpiry());
basicClientCookie.setPath(seleniumCookie.getPath());
cookieStore.addCookie(基本客户端Cookie);
}
返回库克商店;
}
执行此代码后,生成的文件是一个包含网站登录页面html的文件。查看cookie,在登录屏幕上有一个名为
PD-S-SESSION-ID
的cookie,当我登录后,仍然有
PD-S-SESSION-ID
cookie,但具有不同的值和名为
JSESSIONID
的新cookie。我想知道的是,我是否忽略了一些东西,或者我的代码本身有什么问题