伙计们正在尝试使用HttpClient登录到URL https://id.wsj.com/access/50f57264bd7fb2d2f6629af6/latest/login_standalone.html
。但是客户端在通过代码调用时不会从 http://a248.e.akamai.net:443 加载 css。我使用 Fiddler
调试了代码。
我的代码 :
public void getRequest() throws ClientProtocolException, IOException {
try {
HttpHost proxy = new HttpHost("127.0.0.1", 8888);
HttpClient httpclient = HttpClientBuilder.create().setProxy(proxy).setUserAgent("").build();
HttpContext localContext = new BasicHttpContext();
try {
BasicCookieStore cookieStore = new BasicCookieStore();
localContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);
HttpHost target = new HttpHost("id.wsj.com", 443, "https");
HttpGet req = new HttpGet("/access/50f57264bd7fb2d2f6629af6/latest/login_standalone.html");
req.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
req.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36");
System.out.println("executing request to " + target + " via " + proxy);
HttpResponse rsp = httpclient.execute(target, req, localContext);
System.out.println("Status Code" + rsp.getStatusLine().getStatusCode());
printHeaders(rsp.getAllHeaders());
printCookies(cookieStore);
} finally {
httpclient.getConnectionManager().shutdown();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Fiddler Snapshot via Java
http://s3.postimg.org/qimqrxo2q/using_httpclient.jpg
通过铬拍摄快照
http://s17.postimg.org/u6dpmvuam/via_chrome.jpg
我是新手,所以请帮助专家!谢谢!
IMO - 您正在抓取一个可能不需要登录的 html 页面。假设没有 API(WSJ 的官方登录调用 - 就像你在这里看到的 api 登录一样)。
您应该使用调试工具,以查看单击《华尔街日报》上的"登录"按钮时出现什么 POST。您正在处理一个在流程中过早的页面。要以编程方式登录,为什么与登录页面上涉及的"onLogonRequest"事件相关的页面中格式化对话框(而不是进程)的内容?关注单击登录按钮时页面和 JS 通过 XHR 发送到 WSJ 服务器的内容。然后使用您的 HTTP 客户端格式化一个尽可能接近上面提到的 XHR POST 的 POST。
您可能还需要解决路径节点"访问"和"最新"之间的"会话"变量。如果这只是 cookie 信息,您可以忽略它。同样,它与页面对话框混淆,而不是用于登录的 api。
这可能会让您登录。