Я попытался OAuth
войти в Instagram с помощью HttpClient(4.3)
, но получил следующее сообщение об ошибке:
Эта страница не может быть загружена. Если в вашем браузере отключены файлы cookie или вы просматриваете сайт в приватном режиме, попробуйте включить файлы cookie или отключить приватный режим, а затем повторите попытку.
Я потратил три дня, чтобы попробовать все способы, которые я могу сделать, чтобы установить файлы cookie в почтовом запросе, но я так и не решил эту проблему!
Кто может мне помочь?
Этапы моей работы:
1. Get login page with HttpGet.
2. Parse Cookie from response.
3. Parse form action from response.
4. Parse form fields from response.
5. Set Cookie to HttpPost.
6. Set form fields to HttpPost.
7. Post the form.
8. Get the error message.
Код:
Init HttpClient
:RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build(); CookieStore cookieStore = new BasicCookieStore(); HttpClientContext context = HttpClientContext.create(); context.setCookieStore(cookieStore); CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(globalConfig).setDefaultCookieStore(cookieStore).build();
Отправить запрос на получение страницы входа:
HttpGet get = new HttpGet(url); get.setHeader( "User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36"); HttpResponse response = httpClient.execute(get);
Получить куки:
private Map<String, String> getCookies(HttpResponse response) { Map<String, String> cookieMap = new HashMap<String, String>(); Header[] headers = response.getAllHeaders(); for (int i = 0; i < headers.length; i++) { if (headers[i].getName().equals("Set-Cookie")) { String cookie = headers[i].getValue(); String[] pairs = cookie.split(";"); for(String pair: pairs){ String[] keyValue = pair.split("="); String cookieName = keyValue[0]; String cookieValue = keyValue[1]; cookieMap.put(cookieName, cookieValue); } } } return cookieMap; }
Получить поля формы:
// org.htmlparser.Parser private static Map<String, String> getFormFields(NodeList list, String keyword) { Map<String, String> responeMap = new HashMap<String, String>(); SimpleNodeIterator iterator = list.elements(); while (iterator.hasMoreNodes()) { Node node = iterator.nextNode(); NodeList childList = node.getChildren(); if (null == childList) { if (node instanceof InputTag) { InputTag d = (InputTag) node; if (d.getAttribute("name") != null) responeMap.put(d.getAttribute("name"), d.getAttribute("value")); } } else { if(node instanceof FormTag){ FormTag d = (FormTag)node; loginAction = d.getAttribute("action"); } responeMap.putAll(processNodeList(childList, keyword)); } } return responeMap; }
Почтовая форма:
HttpPost post = new HttpPost(loginUrl); post.setHeader( "User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36"); if (cookieMap.size() > 0) { post.setHeader("Cookie", buildCookies(cookieMap)); } UrlEncodedFormEntity uef = new UrlEncodedFormEntity(pairs, "UTF-8"); post.setEntity(uef); response = httpClient.execute(post);
Получить сообщение об ошибке
Эта страница не может быть загружена. Если в вашем браузере отключены файлы cookie или вы просматриваете сайт в приватном режиме, попробуйте включить файлы cookie или отключить приватный режим, а затем повторите попытку.