在重定向到目标网址

时间:2016-12-30 23:08:01

标签: java httpclient apache-commons-httpclient

我的工作必须从" https://www.frbservices.org/EPaymentsDirectory/FedACHdir.txt"下载文件。并放在文件夹中。目前我们在15天内作为作业运行手动完成,但我想在作业处理文件之前使用程序下载文件。

问题在于,当我们点击浏览器上的网址(https://www.frbservices.org/EPaymentsDirectory/FedACHdir.txt)时,第一次点击&#34时会重定向到" https://www.frbservices.org/EPaymentsDirectory/agreement.html" 34;同意"按钮然后它将重定向到" https://www.frbservices.org/EPaymentsDirectory/FedACHdir.txt"。单击“同意”按钮后,JSESSIONID将作为cookie保存在浏览器中。当我们下次点击目标网址时,它会直接打开所需的网页而不同意任何条款..

我在下面试图从目标网址获取响应,但无法按预期实现响应。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;


public class HttpTest {

    static String cookies;
    public static void main(String [] args) throws ClientProtocolException, IOException {
        String url = "https://www.frbservices.org/EPaymentsDirectory/FedACHdir.txt";
        String agreementURL = "https://www.frbservices.org/EPaymentsDirectory/submitAgreement";
        String USER_AGENT = "Mozilla/5.0";
        CookieHandler.setDefault(new CookieManager());

        HttpClient client = HttpClientBuilder.create().build();
        String result;
        result =doPost(agreementURL, USER_AGENT, client);
        System.out.println(result);

        result = doGet(url, USER_AGENT, client);
        System.out.println("result:"+result);
        //String result =doGet(url, USER_AGENT, client);
        if (result != null) {

            Document doc = Jsoup.parse(result.toString());

            // 
            Element agreeElement = doc.getElementById("agree_terms_use");


        }

    }
    public static String getCookies() {
        return cookies;
    }



  public static  void setCookies(String cookies) {
        HttpTest.cookies = cookies;
    }

    public static String doGet(String url , String USER_AGENT, HttpClient client) throws ClientProtocolException, IOException {
        HttpGet request = new HttpGet(url);

        request.setHeader("User-Agent", USER_AGENT);
        request.setHeader("Accept",
            "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        request.setHeader("Accept-Language", "en-US,en;q=0.5");
        System.out.println("c"+getCookies());
        request.setHeader("Cookie", getCookies());

        HttpResponse response = client.execute(request);
        int responseCode = response.getStatusLine().getStatusCode();

        System.out.println("\nSending 'GET' request to URL : " + url);
        System.out.println("Response Code : " + responseCode);
        System.out.println(response);
        BufferedReader rd = new BufferedReader(
                new InputStreamReader(response.getEntity().getContent()));

        StringBuffer result = new StringBuffer();
        String line = "";
        while ((line = rd.readLine()) != null) {
            result.append(line);
        }
        return result.toString();
    }

    public static String doPost(String url , String USER_AGENT, HttpClient client) throws ClientProtocolException, IOException {
        HttpPost post = new HttpPost(url);

        post.setHeader("Host", "www.frbservices.org");
        post.setHeader("User-Agent", USER_AGENT);
        post.setHeader("Accept",
                 "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        post.setHeader("Accept-Encoding","gzip, deflate, br");
        post.setHeader("Accept-Language", "en-US,en;q=0.5");
        post.setHeader("Location", "https://www.frbservices.org/EPaymentsDirectory/FedACHdir.txt");
        post.setHeader("Connection", "keep-alive");
        post.setHeader("Referer", "https://www.frbservices.org/EPaymentsDirectory/agreement.html");
        post.setHeader("Content-Type", "application/x-www-form-urlencoded");
        post.setHeader("origin", "https://www.frbservices.org");
        post.setHeader("Upgrade-Insecure-Requests","1");
        //post.setHeader("agreementValue","Agree");

        List<BasicNameValuePair> paramList = new ArrayList<BasicNameValuePair>();
        paramList.add(new BasicNameValuePair("agreementValue", "Agree"));

        post.setEntity(new UrlEncodedFormEntity(paramList));


        HttpResponse response = client.execute(post);

        int responseCode = response.getStatusLine().getStatusCode();

        System.out.println("\nSending 'GET' request to URL : " + url);
        System.out.println("Response Code : " + responseCode);
        System.out.println("Response: " + response);
        BufferedReader rd = new BufferedReader(
                new InputStreamReader(response.getEntity().getContent()));

        setCookies(response.getFirstHeader("Set-Cookie") == null ? "" :
            response.getFirstHeader("Set-Cookie").toString());

        StringBuffer result = new StringBuffer();
        String line = "";
        while ((line = rd.readLine()) != null) {
            result.append(line);
        }
        return result.toString();
    }

}

0 个答案:

没有答案