下面列出了org.apache.http.client.protocol.HttpClientContext#setCookieStore ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private HttpClientContext convertHttpClientContext(Request request, Site site, Proxy proxy) {
HttpClientContext httpContext = new HttpClientContext();
if (proxy != null && proxy.getUsername() != null) {
AuthState authState = new AuthState();
authState.update(new BasicScheme(ChallengeState.PROXY), new UsernamePasswordCredentials(proxy.getUsername(), proxy.getPassword()));
httpContext.setAttribute(HttpClientContext.PROXY_AUTH_STATE, authState);
}
if (request.getCookies() != null && !request.getCookies().isEmpty()) {
CookieStore cookieStore = new BasicCookieStore();
for (Map.Entry<String, String> cookieEntry : request.getCookies().entrySet()) {
BasicClientCookie cookie1 = new BasicClientCookie(cookieEntry.getKey(), cookieEntry.getValue());
cookie1.setDomain(UrlUtils.removePort(UrlUtils.getDomain(request.getUrl())));
cookieStore.addCookie(cookie1);
}
httpContext.setCookieStore(cookieStore);
}
return httpContext;
}
public Session process() throws IOException {
HttpRequest request = this.getRequest();
Objects.requireNonNull(this.request);
HttpClient httpClient = this.getHttpClient();
HttpClientContext context = this.getContext();
if (request instanceof HttpGet) {
this.getContext().setCookieStore(cookies);
HttpGet get = (HttpGet) request;
this.httpResponse = httpClient.execute(get, context);
this.httpCode = httpResponse.getStatusLine().getStatusCode();
this.repUtils = new ResponseUtils(this.httpResponse);
} else if (this.request instanceof HttpPost) {
context.setCookieStore(cookies);
HttpPost post = (HttpPost) request;
post.setEntity(this.getProviderService().builder());
this.httpResponse = this.httpClient.execute(post, this.context);
this.httpCode = httpResponse.getStatusLine().getStatusCode();
this.repUtils = new ResponseUtils(this.httpResponse);
}
return this;
}
public static CloseableHttpResponse getResponse(HttpRequestBase request) throws IOException {
if (request.getConfig() == null){
request.setConfig(requestConfig);
}
request.setHeader("User-Agent", CommonConstant.userAgentArray[new Random().nextInt(CommonConstant.userAgentArray.length)]);
HttpClientContext httpClientContext = HttpClientContext.create();
httpClientContext.setCookieStore(cookieStore);
CloseableHttpResponse response = httpClient.execute(request, httpClientContext);
// int statusCode = response.getStatusLine().getStatusCode();
// if(statusCode != 200){
// throw new IOException("status code is:" + statusCode);
// }
return response;
}
/**
* Create a separate Http context to protect session cookies.
*
* @return HttpClientContext instance with cookies
*/
private HttpClientContext cloneContext() {
// Create a local context to avoid cookie reset on error
BasicCookieStore cookieStore = new BasicCookieStore();
cookieStore.addCookies(httpClientAdapter.getCookies().toArray(new org.apache.http.cookie.Cookie[0]));
HttpClientContext context = HttpClientContext.create();
context.setCookieStore(cookieStore);
return context;
}
/**
* https://uac.10010.com/portal/Service/SendMSG?callback=jQuery17205929719702722311_1528559748925&req_time=1528560335346&mobile=13249073372&_=1528560335347
* @throws Exception
* @throws ParseException
*/
@Test
public void sendSms() throws ParseException, Exception {
CookieStore cookie = new BasicCookieStore() ;
HttpClientContext httpClientContext = HttpClientContext.create();
httpClientContext.setCookieStore(cookie);
MultiValueMap<String,String> params = new LinkedMultiValueMap<>();
params.put("req_time", Lists.newArrayList(String.valueOf(System.currentTimeMillis())));
params.put("_=", Lists.newArrayList(String.valueOf(System.currentTimeMillis())));
params.put("mobile", Lists.newArrayList("13249073372"));
String url = UriComponentsBuilder.fromHttpUrl("https://uac.10010.com/portal/Service/SendMSG").queryParams(params).build().toUriString();
HttpGet request = new HttpGet(url);
request.setHeader("Referer", "https://uac.10010.com/portal/custLogin");
request.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36");
CloseableHttpResponse response = client.execute(request, httpClientContext);
System.out.println("response:" + JSON.toJSONString(response));
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {// 成功
HttpEntity entity = response.getEntity();
if (null != entity) {
String result = EntityUtils.toString(entity, "UTF-8");
EntityUtils.consume(entity);
System.out.println("result" + result);
} else {
throw new ServiceException("请求无数据返回");
}
} else {
throw new ServiceException("请求状态异常失败");
}
System.out.println("cookie:" + JSON.toJSONString(cookie));
}
/**
* https://upay.10010.com/npfweb/NpfWeb/buyCard/sendPhoneVerifyCode?callback=sendSuccess&commonBean.phoneNo=13249073372&timeStamp=0.474434596328998
* @throws ParseException
* @throws Exception
* sendSuccess('true') 返回格式
*/
@Test
public void chargeSms() throws ParseException, Exception {
String mobile = "13249073372";
CookieStore cookieStore = valueOperations.get(mobile);
HttpClientContext httpClientContext = HttpClientContext.create();
httpClientContext.setCookieStore(cookieStore);
MultiValueMap<String,String> params = new LinkedMultiValueMap<>();
params.put("commonBean.phoneNo", Lists.newArrayList(mobile));
params.put("timeStamp", Lists.newArrayList(String.valueOf(System.currentTimeMillis())));
String url = UriComponentsBuilder.fromHttpUrl("https://upay.10010.com/npfweb/NpfWeb/buyCard/sendPhoneVerifyCode").queryParams(params).build().toUriString();
HttpGet request = new HttpGet(url);
request.setHeader("Referer", "https://uac.10010.com/portal/custLogin");
request.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36");
CloseableHttpResponse response = client.execute(request, httpClientContext);
System.out.println("response:" + JSON.toJSONString(response));
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {// 成功
HttpEntity entity = response.getEntity();
if (null != entity) {
String result = EntityUtils.toString(entity, "UTF-8");
EntityUtils.consume(entity);
System.out.println("result" + result);
} else {
throw new ServiceException("请求无数据返回");
}
} else {
throw new ServiceException("请求状态异常失败");
}
}
/**
* https://upay.10010.com/npfweb/NpfWeb/buyCard/checkPhoneVerifyCode?callback=checkSuccess&commonBean.phoneNo=13249073372&phoneVerifyCode=932453&timeStamp=0.3671002044464746
* @throws ParseException
* @throws Exception
* sendSuccess('true') 返回格式
*/
@Test
public void checkChargeSms() throws ParseException, Exception {
String mobile = "13249073372";
CookieStore cookieStore = valueOperations.get(mobile);
HttpClientContext httpClientContext = HttpClientContext.create();
httpClientContext.setCookieStore(cookieStore);
MultiValueMap<String,String> params = new LinkedMultiValueMap<>();
params.put("commonBean.phoneNo", Lists.newArrayList(mobile));
params.put("phoneVerifyCode", Lists.newArrayList("904114"));
params.put("timeStamp", Lists.newArrayList(String.valueOf(System.currentTimeMillis())));
String url = UriComponentsBuilder.fromHttpUrl("https://upay.10010.com/npfweb/NpfWeb/buyCard/checkPhoneVerifyCode").queryParams(params).build().toUriString();
HttpGet request = new HttpGet(url);
request.setHeader("Referer", "https://upay.10010.com/npfweb/npfbuycardweb/buycard_recharge_fill.htm");
request.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36");
CloseableHttpResponse response = client.execute(request, httpClientContext);
System.out.println("response:" + JSON.toJSONString(response));
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {// 成功
HttpEntity entity = response.getEntity();
if (null != entity) {
String result = EntityUtils.toString(entity, "UTF-8");
EntityUtils.consume(entity);
System.out.println("result" + result);
} else {
throw new ServiceException("请求无数据返回");
}
} else {
throw new ServiceException("请求状态异常失败");
}
}
/**
* https://upay.10010.com/npfweb/NpfWeb/buyCard/buyCardCheck?
* cardBean.cardValueCode=04&offerPriceStrHidden=100.00
* &offerRateStrHidden=1&cardBean.cardValue=100&cardBean.minCardNum=1
* &cardBean.maxCardNum=3&MaxThreshold01=15&MinThreshold01=1&MaxThreshold02=10
* &MinThreshold02=1&MaxThreshold03=6&MinThreshold03=1&MaxThreshold04=3
* &MinThreshold04=1&commonBean.channelType=101
* &secstate.state=3mCBuETgA%2FYTbuZO79gHFA%3D%3D%5E%40%5E0.0.1
* &cardBean.buyCardAmount=1&cardBean.buyCardEmail=734839030%40qq.com
* &cardBean.buyCardPhoneNo=13249073372&phoneVerifyCode=419906
* &invoiceBean.need_invoice=0&invoiceBean.invoice_type=
* &invoiceBean.is_mailing=0&saveflag=false&commonBean.provinceCode=&commonBean.cityCode=&invoiceBean.invoice_list=
* {"secstate":""}
*/
@Test
public void order() throws ParseException, Exception {
String mobile = "13249073372";
String email= "[email protected]";
String phoneVerifyCode="874501";
CookieStore cookieStore = valueOperations.get(mobile);
HttpClientContext httpClientContext = HttpClientContext.create();
httpClientContext.setCookieStore(cookieStore);
String url = UriComponentsBuilder.fromHttpUrl("https://upay.10010.com/npfweb/NpfWeb/buyCard/buyCardCheck").query("cardBean.cardValueCode=04&offerPriceStrHidden=100.00&offerRateStrHidden=1&cardBean.cardValue=100&cardBean.minCardNum=1&cardBean.maxCardNum=3&MaxThreshold01=15&MinThreshold01=1&MaxThreshold02=10&MinThreshold02=1&MaxThreshold03=6&MinThreshold03=1&MaxThreshold04=3&MinThreshold04=1&commonBean.channelType=101&secstate.state=3mCBuETgA%2FYTbuZO79gHFA%3D%3D%5E%40%5E0.0.1&cardBean.buyCardAmount=1&cardBean.buyCardEmail=" + email+ "&cardBean.buyCardPhoneNo=" + mobile+ "&phoneVerifyCode=" + phoneVerifyCode +"&invoiceBean.need_invoice=0&invoiceBean.invoice_type=&invoiceBean.is_mailing=0&saveflag=false&commonBean.provinceCode=&commonBean.cityCode=&invoiceBean.invoice_list=").build().toUriString();
HttpGet request = new HttpGet(url);
request.setHeader("Referer", "https://upay.10010.com/npfweb/npfbuycardweb/buycard_recharge_fill.htm");
request.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36");
CloseableHttpResponse response = client.execute(request, httpClientContext);
System.out.println("response:" + JSON.toJSONString(response));
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {// 成功
HttpEntity entity = response.getEntity();
if (null != entity) {
String result = EntityUtils.toString(entity, "UTF-8");
EntityUtils.consume(entity);
System.out.println("result" + result);
} else {
throw new ServiceException("请求无数据返回");
}
} else {
throw new ServiceException("请求状态异常失败");
}
}
protected HttpClientContext createHttpClientContextForUser(final CloseableHttpClient httpClient, String userName, String password) throws IOException {
final HttpClientContext context = HttpClientContext.create();
CookieStore cookieStore = new BasicCookieStore();
context.setCookieStore(cookieStore);
HttpUriRequest request = handleLogin(getPageContent(oauth.getLoginFormUrl(), httpClient, context), userName, password);
Assert.assertThat(parseAndCloseResponse(httpClient.execute(request, context)), containsString("<title>AUTH_RESPONSE</title>"));
return context;
}
public final static void main(String[] args) throws Exception {
CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
try {
// Create a local instance of cookie store
CookieStore cookieStore = new BasicCookieStore();
// Create local HTTP context
HttpClientContext localContext = HttpClientContext.create();
// Bind custom cookie store to the local context
localContext.setCookieStore(cookieStore);
HttpGet httpget = new HttpGet("http://localhost/");
System.out.println("Executing request " + httpget.getRequestLine());
httpclient.start();
// Pass local context as a parameter
Future<HttpResponse> future = httpclient.execute(httpget, localContext, null);
// Please note that it may be unsafe to access HttpContext instance
// while the request is still being executed
HttpResponse response = future.get();
System.out.println("Response: " + response.getStatusLine());
List<Cookie> cookies = cookieStore.getCookies();
for (int i = 0; i < cookies.size(); i++) {
System.out.println("Local cookie: " + cookies.get(i));
}
System.out.println("Shutting down");
} finally {
httpclient.close();
}
}
/**
* This method provides browser cookie for authenticating user to AEM instance
*
* @param url URL to AEM instance, like http://localhost:4502
* @param login Username to use
* @param password Password to use
* @return Cookie for selenium WebDriver.
*/
@Override
public Cookie getCookie(String url, String login, String password) {
if (!cookieJar.containsKey(url)) {
HttpPost loginPost = new HttpPost(url
+ "/libs/granite/core/content/login.html/j_security_check");
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("_charset_", "utf-8"));
nameValuePairs.add(new BasicNameValuePair("j_username", login));
nameValuePairs.add(new BasicNameValuePair("j_password", password));
nameValuePairs.add(new BasicNameValuePair("j_validate", "true"));
CookieStore cookieStore = new BasicCookieStore();
HttpClientContext context = HttpClientContext.create();
context.setCookieStore(cookieStore);
try {
loginPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
CloseableHttpResponse loginResponse = httpClient.execute(loginPost, context);
loginResponse.close();
} catch (IOException e) {
LOG.error("Can't get AEM authentication cookie", e);
} finally {
loginPost.reset();
}
Cookie cookie = findAuthenticationCookie(cookieStore.getCookies());
cookieJar.put(url, cookie);
}
return cookieJar.get(url);
}
public static boolean deserializeCookie(String path, HttpClientContext httpClientContext) {
try {
CookieStore cookieStore = (CookieStore) deserializeMyContext(path);
httpClientContext.setCookieStore(cookieStore);
} catch (Exception e) {
return false;
}
return true;
}
@Test
public void loginError() throws IOException {
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpClientContext context = HttpClientContext.create();
context.setCookieStore(new BasicCookieStore());
// 1. first GET to fetch execution
HttpGet get = new HttpGet(getLoginURL());
get.addHeader(new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "en-US,en;q=0.5"));
CloseableHttpResponse response = httpclient.execute(get, context);
assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
String responseBody = EntityUtils.toString(response.getEntity());
int begin = responseBody.indexOf("name=\"execution\" value=\"");
assertNotEquals(-1, begin);
int end = responseBody.indexOf("\"/><input type=\"hidden\" name=\"_eventId\"");
assertNotEquals(-1, end);
String execution = responseBody.substring(begin + 24, end);
assertNotNull(execution);
// 2. then POST to authenticate
List<NameValuePair> form = new ArrayList<>();
form.add(new BasicNameValuePair("_eventId", "submit"));
form.add(new BasicNameValuePair("execution", execution));
form.add(new BasicNameValuePair("username", "mrossi"));
form.add(new BasicNameValuePair("password", "WRONG"));
form.add(new BasicNameValuePair("geolocation", ""));
HttpPost post = new HttpPost(getLoginURL());
post.addHeader(new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "en-US,en;q=0.5"));
post.setEntity(new UrlEncodedFormEntity(form, Consts.UTF_8));
response = httpclient.execute(post, context);
// 3. check authentication results
assertEquals(HttpStatus.SC_UNAUTHORIZED, response.getStatusLine().getStatusCode());
}
@Test
public void testWithCustomScheme() throws IOException {
oauth.clientId("custom-scheme");
oauth.redirectUri("android-app://org.keycloak.examples.cordova/https/keycloak-cordova-example.github.io/login");
oauth.openLoginForm();
RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.BEST_MATCH).build();
CookieStore cookieStore = new BasicCookieStore();
HttpClientContext context = HttpClientContext.create();
context.setCookieStore(cookieStore);
String loginUrl = driver.getCurrentUrl();
CloseableHttpClient client = HttpClients.custom().setDefaultRequestConfig(globalConfig).setDefaultCookieStore(cookieStore).build();
try {
String loginPage = SimpleHttp.doGet(loginUrl, client).asString();
String formAction = loginPage.split("action=\"")[1].split("\"")[0].replaceAll("&", "&");
SimpleHttp.Response response = SimpleHttp.doPost(formAction, client).param("username", "[email protected]").param("password", "password").asResponse();
response.getStatus();
assertThat(response.getFirstHeader("Location"), Matchers.startsWith("android-app://org.keycloak.examples.cordova/https/keycloak-cordova-example.github.io/login"));
} finally {
client.close();
}
}
/**
* Send a request with a Cookie "test-cookie" to vary.jsp (which will get content from provider) and ensure the
* result is valid.
*
* @param cookieValue
* @param forceRefresh
* @return Page timestamp. Can be used to detect cache hits.
* @throws Exception
*/
private String doCookieRequest(String cookieValue, boolean forceRefresh) throws Exception {
CookieStore cookieStore = new BasicCookieStore();
HttpClientContext context = new HttpClientContext();
context.setCookieStore(cookieStore);
CloseableHttpClient client = HttpClients.createDefault();
RequestConfig config = RequestConfig.custom().setCookieSpec(CookieSpecs.DEFAULT).build();
HttpGet request = new HttpGet("http://localhost:8080/esigate-app-master/vary.jsp");
request.setConfig(config);
if (cookieValue != null) {
BasicClientCookie cookie = new BasicClientCookie("test-cookie", cookieValue);
cookie.setDomain("localhost");
cookie.setPath("/");
cookieStore.addCookie(cookie);
}
if (forceRefresh) {
request.addHeader("Cache-Control", "no-cache");
}
HttpResponse response = client.execute(request, context);
// Ensure content is valid.
String text = IOUtils.toString(response.getEntity().getContent());
assertNotNull(text);
LOG.debug("----- Request with cookie " + cookieValue + " and forceRefresh=" + forceRefresh + " -----> \n"
+ text);
if (cookieValue != null) {
assertTrue("no value '" + cookieValue + "' found", text.contains(cookieValue));
} else {
assertTrue("no cookie found", text.contains("no cookie"));
}
client.close();
return text.substring(text.indexOf("stime") + 5, text.indexOf("etime"));
}
@Test
public void payPage() throws ParseException, Exception {
String mobile = "13249073372";
String email= "[email protected]";
String phoneVerifyCode="874501";
CookieStore cookieStore = valueOperations.get(mobile);
HttpClientContext httpClientContext = HttpClientContext.create();
httpClientContext.setCookieStore(cookieStore);
String url = UriComponentsBuilder.fromHttpUrl("https://upay.10010.com/npfweb/NpfWeb/buyCard/buyCardSubmit").build().toUriString();
HttpPost request = new HttpPost(url);
Map<String, String> params = new HashMap<String,String>();
params.put("cardBean.cardValueCode", "04");
params.put("offerPriceStrHidden", "100.00");
params.put("offerRateStrHidden", "1");
params.put("cardBean.cardValue", "100");
params.put("cardBean.minCardNum", "1");
params.put("cardBean.maxCardNum", "3");
params.put("MaxThreshold01", "15");
params.put("MinThreshold01", "1");
params.put("MaxThreshold02", "10");
params.put("MinThreshold02", "1");
params.put("MaxThreshold03", "6");
params.put("MinThreshold03", "1");
params.put("MaxThreshold04", "3");
params.put("MinThreshold04", "1");
params.put("commonBean.channelType", "101");
//params.put("secstate.state", IOUtils.toString(new FileReader("/Users/hdf/Desktop/1.txt")));
params.put("secstate.state", "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^@^0.0.1");
params.put("cardBean.buyCardAmount", "1");
params.put("cardBean.buyCardEmail", email);
params.put("cardBean.buyCardPhoneNo", mobile);
params.put("phoneVerifyCode",phoneVerifyCode);
params.put("invoiceBean.need_invoice", " 0");
params.put("invoiceBean.invoice_type ", "");
params.put("invoiceBean.is_mailing", "0");
params.put("saveflag ", "false");
params.put("commonBean.provinceCode", "");
params.put("commonBean.cityCode", "");
params.put("invoiceBean.invoice_list ", "");
request.setEntity(getUrlEncodedFormEntity(params));
request.setHeader("Referer", "https://upay.10010.com/npfweb/npfbuycardweb/buycard_recharge_fill.htm");
request.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36");
CloseableHttpResponse response = client.execute(request, httpClientContext);
System.out.println("response:" + JSON.toJSONString(response));
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {// 成功
HttpEntity entity = response.getEntity();
if (null != entity) {
String result = EntityUtils.toString(entity, "UTF-8");
EntityUtils.consume(entity);
System.out.println("result" + result);
} else {
throw new ServiceException("请求无数据返回");
}
} else if (response.getStatusLine().getStatusCode() == 302) {
Header header = response.getFirstHeader("location"); // 跳转的目标地址是在 HTTP-HEAD 中的
String newuri = header.getValue(); // 这就是跳转后的地址,再向这个地址发出新申请,以便得到跳转后的信息是啥。
System.out.println("redirect url:" + newuri);
HttpGet redirectRequest = new HttpGet(newuri);
CloseableHttpResponse response2 = client.execute(redirectRequest, httpClientContext);
System.out.println("response2:" + JSON.toJSONString(response2));
} else {
throw new ServiceException("请求状态异常失败");
}
}
@Override
public void run(int threadIndex, Keycloak keycloak, RealmResource realm) throws Throwable {
int i = sameClient ? 0 : clientIndex.getAndIncrement();
OAuthClient oauth1 = oauthClient.get();
oauth1.clientId("client" + i);
log.infof("%d [%s]: Accessing login page for %s", threadIndex, Thread.currentThread().getName(), oauth1.getClientId());
final HttpClientContext templateContext = clientContexts.get(i % clientContexts.size());
final HttpClientContext context = HttpClientContext.create();
context.setCookieStore(templateContext.getCookieStore());
String pageContent = getPageContent(oauth1.getLoginFormUrl(), httpClient, context);
Assert.assertThat(pageContent, Matchers.containsString("<title>AUTH_RESPONSE</title>"));
Assert.assertThat(context.getRedirectLocations(), Matchers.notNullValue());
Assert.assertThat(context.getRedirectLocations(), Matchers.not(Matchers.empty()));
String currentUrl = context.getRedirectLocations().get(0).toString();
Map<String, String> query = getQueryFromUrl(currentUrl);
String code = query.get(OAuth2Constants.CODE);
String state = query.get(OAuth2Constants.STATE);
Assert.assertEquals("Invalid state.", state, oauth1.getState());
AtomicReference<OAuthClient.AccessTokenResponse> accessResRef = new AtomicReference<>();
totalInvocations.incrementAndGet();
// obtain access + refresh token via code-to-token flow
OAuthClient.AccessTokenResponse accessRes = oauth1.doAccessTokenRequest(code, "password");
Assert.assertEquals("AccessTokenResponse: client: " + oauth1.getClientId() + ", error: '" + accessRes.getError() + "' desc: '" + accessRes.getErrorDescription() + "'",
200, accessRes.getStatusCode());
accessResRef.set(accessRes);
// Refresh access + refresh token using refresh token
AtomicReference<OAuthClient.AccessTokenResponse> refreshResRef = new AtomicReference<>();
int invocationIndex = Retry.execute(() -> {
OAuthClient.AccessTokenResponse refreshRes = oauth1.doRefreshTokenRequest(accessResRef.get().getRefreshToken(), "password");
Assert.assertEquals("AccessTokenResponse: client: " + oauth1.getClientId() + ", error: '" + refreshRes.getError() + "' desc: '" + refreshRes.getErrorDescription() + "'",
200, refreshRes.getStatusCode());
refreshResRef.set(refreshRes);
}, retryCount, retryDelayMs);
retryHistogram[invocationIndex].incrementAndGet();
AccessToken token = JsonSerialization.readValue(new JWSInput(accessResRef.get().getAccessToken()).getContent(), AccessToken.class);
Assert.assertEquals("Invalid nonce.", token.getNonce(), oauth1.getNonce());
AccessToken refreshedToken = JsonSerialization.readValue(new JWSInput(refreshResRef.get().getAccessToken()).getContent(), AccessToken.class);
Assert.assertEquals("Invalid nonce.", refreshedToken.getNonce(), oauth1.getNonce());
if (userSessionId.get() == null) {
userSessionId.set(token.getSessionState());
}
}
public URLToolsClient() {
httpclient = HttpClients.custom().setUserAgent(MTGConstants.USER_AGENT).setRedirectStrategy(new LaxRedirectStrategy()).build();
httpContext = new HttpClientContext();
cookieStore = new BasicCookieStore();
httpContext.setCookieStore(cookieStore);
}
public static void main(String[] args) throws HttpProcessException {
//登录地址
String loginUrl = "https://passport.csdn.net/account/login";
//C币查询
String scoreUrl = "http://my.csdn.net/my/score";
//定义cookie存储
HttpClientContext context = new HttpClientContext();
CookieStore cookieStore = new BasicCookieStore();
context.setCookieStore(cookieStore);
HttpConfig config =HttpConfig.custom().url(loginUrl).context(context);
//获取参数
String loginform = HttpClientUtil.get(config);//可以用.send(config)代替,但是推荐使用明确的get方法
//System.out.println(loginform);
System.out.println("获取登录所需参数");
String lt = regex("\"lt\" value=\"([^\"]*)\"", loginform)[0];
String execution = regex("\"execution\" value=\"([^\"]*)\"", loginform)[0];
String _eventId = regex("\"_eventId\" value=\"([^\"]*)\"", loginform)[0];
//组装参数
Map<String, Object> map = new HashMap<String, Object>();
map.put("username", "用户名");
map.put("password", "密码");
map.put("lt", lt);
map.put("execution", execution);
map.put("_eventId", _eventId);
//发送登录请求
String result = HttpClientUtil.post(config.map(map));//可以用.send(config.method(HttpMethods.POST).map(map))代替,但是推荐使用明确的post方法
//System.out.println(result);
if(result.contains("帐号登录")){//如果有帐号登录,则说明未登录成功
String errmsg = regex("\"error-message\">([^<]*)<", result)[0];
System.err.println("登录失败:"+errmsg);
return;
}
System.out.println("----登录成功----");
// //打印参数,可以看到cookie里已经有值了。
// cookieStore = context.getCookieStore();
// for (Cookie cookie : cookieStore.getCookies()) {
// System.out.println(cookie.getName()+"--"+cookie.getValue());
// }
//访问积分管理页面
Header[] headers = HttpHeader.custom().userAgent("User-Agent: Mozilla/5.0").build();
result = HttpClientUtil.post(config.url(scoreUrl).headers(headers));//可以用.send(config.url(scoreUrl).headers(headers))代替,但是推荐使用明确的post方法
//获取C币
String score = regex("\"last-img\"><span>([^<]*)<", result)[0];
System.out.println("您当前有C币:"+score);
}
@Test
public void loginLogout() throws IOException {
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpClientContext context = HttpClientContext.create();
context.setCookieStore(new BasicCookieStore());
// 1. first GET to fetch execution
HttpGet get = new HttpGet(getLoginURL());
get.addHeader(new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "en-US,en;q=0.5"));
CloseableHttpResponse response = httpclient.execute(get, context);
assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
String responseBody = EntityUtils.toString(response.getEntity());
int begin = responseBody.indexOf("name=\"execution\" value=\"");
assertNotEquals(-1, begin);
int end = responseBody.indexOf("\"/><input type=\"hidden\" name=\"_eventId\"");
assertNotEquals(-1, end);
String execution = responseBody.substring(begin + 24, end);
assertNotNull(execution);
// 2. then POST to authenticate
List<NameValuePair> form = new ArrayList<>();
form.add(new BasicNameValuePair("_eventId", "submit"));
form.add(new BasicNameValuePair("execution", execution));
form.add(new BasicNameValuePair("username", "mrossi"));
form.add(new BasicNameValuePair("password", "password"));
form.add(new BasicNameValuePair("geolocation", ""));
HttpPost post = new HttpPost(getLoginURL());
post.addHeader(new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "en-US,en;q=0.5"));
post.setEntity(new UrlEncodedFormEntity(form, Consts.UTF_8));
response = httpclient.execute(post, context);
// 3. check authentication results
assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
Header[] cookie = response.getHeaders("Set-Cookie");
assertNotNull(cookie);
assertTrue(cookie.length > 0);
assertEquals(1, Stream.of(cookie).filter(item -> item.getValue().startsWith("TGC")).count());
String body = EntityUtils.toString(response.getEntity());
assertTrue(body.contains("Log In Successful"));
assertTrue(body.contains("have successfully logged into the Central Authentication Service"));
// 4. logout
HttpGet logout = new HttpGet(getLoginURL().replace("login", "logout"));
logout.addHeader(new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "en-US,en;q=0.5"));
response = httpclient.execute(logout, context);
assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
body = EntityUtils.toString(response.getEntity());
assertTrue(body.contains("Logout successful"));
assertTrue(body.contains("have successfully logged out of the Central Authentication Service"));
}