3

我想从需要用户并通过的网页下载文件,但首先我必须获取 cookie。我想要做的正是在这个 Python 脚本中描述的,但我想用 Java 来做。

我一直在阅读相关内容,并且找到了 httpclient 库。我只需要httpclient吗?java中机械化和urllib2的任何等效库?

提前致谢。

#!/usr/bin/python

import mechanize, urllib2
from urllib import urlopen, urlencode 

user = 'username'
password = 'password'
output_file = 'name.pdf'

web = "https://..."
bills_page = "https://.../bills"
login_web = "https://.../login/"
file = "https://.../file_I_want"

br = mechanize.Browser()
br.open(web)

data = {
    'user_username': user,
    'user_password': password,
    'idClientehidden': '',
    'answer': ''
}

response1 = urllib2.Request(login_web, urlencode(data))

br.open(response1)
br.open(bills_page)
html_bills = br.response().read()

br.open(file)
pdf_bill = open(output_file, 'w')
pdf_bill.write(br.response().read())
pdf_bill.close()
4

1 回答 1

3

HttpClient是一个很好的框架,用于处理 cookie 和访问经过身份验证的 URL。

或者,您可以使用核心 Java 组件,例如AuthenticatorURLBufferedReader,如下所示:

  1. 创建一个自定义 Authenticator,它将userId/Password从 cookie中读取

    public class HTTPAuthenticator extends Authenticator {
    
      protected PasswordAuthentication getPasswordAuthentication() {
         String username = "user"; //<--read from cookie
         String password = "password"; //<--read from cookie
         return new PasswordAuthentication(username, password.toCharArray());
      }
    }
    
  2. 将您的自定义身份验证器设置HTTPAuthenticator为默认身份验证器。

    Authenticator.setDefault(new HTTPAuthenticator());
    
  3. 完成后,读取文件并写入本地驱动器,如下所示:

    URL url = new URL("http://secureweb/secure.html");
    BufferedReader br= new BufferedReader(new InputStreamReader(url.openStream()));
    File file = new File("myLocalFile");
    BufferedWriter bw = new BufferedWriter (file);
    String lineStr;
    while ((str = br.readLine()) != null) {
         bw.write();
    }
    bw.close();
    br.close();
    

希望这可以帮助。

于 2012-10-14T06:14:03.140 回答