package protocol.vk.api; import jimm.modules.DebugLog; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; 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.client.methods.HttpUriRequest; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.ExecutionContext; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; import java.io.IOException; import java.util.HashMap; import java.util.LinkedList; import java.util.List; /** * Created with IntelliJ IDEA. * <p/> * Date: 09.03.13 8:07 * * @author vladimir */ public class WebClient { private HttpClient client = new DefaultHttpClient(); private VkApp.VkDialogListener listener; public void oauth(String url, String email, String pass, VkApp.VkDialogListener _listener) { try { listener = _listener; FormParser fp = new FormParser(); String page = request(url); int limit = 5; while (null != page) { HashMap<String, String> login = fp.process(page); login.put("email", email); login.put("pass", pass); page = request(login); limit--; if ((null != page) && (0 == limit)) { DebugLog.println("vk page " + page); listener.onError(""); break; } } } catch (IOException ignored) { } } private String request(String uri) { HttpGet request = new HttpGet(uri); try { HttpResponse response = client.execute(request); return EntityUtils.toString(response.getEntity()); } catch (Exception ioex) { jimm.modules.DebugLog.panic("uri" + uri, ioex); return null; } } private String request(HashMap<String, String> request) throws IOException { String url = request.get("@action"); String method = request.get("@method").toUpperCase(); request.remove("@action"); request.remove("@method"); if ("POST".equals(method)) { HttpPost post = new HttpPost(url); List<NameValuePair> nameValuePairs = new LinkedList<NameValuePair>(); for (String key : request.keySet()) { nameValuePairs.add(new BasicNameValuePair(key, request.get(key))); } post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpContext context = new BasicHttpContext(); HttpResponse response = client.execute(post, context); HttpUriRequest currentReq = (HttpUriRequest) context.getAttribute(ExecutionContext.HTTP_REQUEST); String resultUrl = currentReq.getURI().toString(); if (-1 < resultUrl.indexOf("/blank.html")) { done(resultUrl); return null; } return EntityUtils.toString(response.getEntity()); } throw new IOException("method do not supported"); } private void done(String url) { if (url.contains("access_token")) { listener.onComplete(url); } else { listener.onError(""); } } }