안 드 로 이 드 는 OkHttp 를 사용 하여 방향 을 바 꾸 어 차단 처리 하 는 방법
대략적인 원 리 는 어 떻 습 니까?
먼저 브 라 우 저 는 사용자 로그 인 을 어떻게 하 는 지 알려 드 리 겠 습 니 다.브 라 우 저 는 당신 이 입력 한 계 정과 비밀 번 호 를 POST 요청 을 통 해 가 져 갈 것 입 니 다.물론 다른 필드 도 있 을 수 있 습 니 다.이 POST 요청 은 우리 웹 페이지 와 서버 가 규정 한 것 이기 때 문 입 니 다.로그 인 에 성공 하면 서버 는 Set-Cookie 요청 헤더 필드 를 되 돌려 줍 니 다.Cookie 브 라 우 저가 있 으 면 GET 를 통 해 로그 인 한 웹 페이지 에 접근 할 수 있 습 니 다.이 Cookie 가 없 으 면 로그 인 한 웹 페이지 를 요청 할 수 없 음 을 주의 하 십시오.GET 요청 은 Cookie 요청 헤더 필드 를 설정 하여 서버 가 돌아 온 Cookie 를 가 져 가 야 합 니 다.
브 라 우 저의 행동 을 알 게 된 후에 우 리 는 해 야 할 절차 가 4 단계 라 는 것 을 알 게 되 었 다.
4.567917.스스로 POST 요청 을 하고 자동 으로 방향 을 바 꾸 지 못 하 게 합 니 다.
계 정 비밀 번 호 를 입력 하고 로그 인 을 클릭 하면 됩 니 다.
로그 인 을 클릭 하면 제어 판 에 방문 기록 이 한 무더기 나 타 났 습 니 다.첫 번 째 는 우리 가 찾 는 것 입 니 다.첫 번 째 Status 표 지 는 302 이 고 302 는 방향 을 바 꾸 는 것 입 니 다.우 리 는(pass.asp)이 요청 을 클릭 하고 POST 요청 헤드 를 봅 니 다(Headers 클릭).
우 리 는 Set-Cookie 필드 를 보 았 습 니 다.필드 에 대응 하 는 내용 은 우리 가 GET 요청 을 휴대 해 야 하 는 것 입 니 다.
또한 POST 가 제출 한 폼 내용 을 볼 수 있 습 니 다.일부 사이트 의 제출 매개 변 수 는 암호 화 되 어 있 습 니 다.일반적인 것 을 하려 면 암호 화 하 는 방법 을 찾 아 똑 같은 암호 화 처 리 를 해 야 합 니 다.
이제 OkHttp 로 작업 을 진행 해 보도 록 하 겠 습 니 다.
OkHttp 는 쿠키 를 자동 으로 가지 고 요청 하 는 기능 을 제공 하기 때문에 편리 하 게 처리 할 수 있 습 니 다.
final OkHttpClient client = new OkHttpClient().newBuilder()
.followRedirects(false) // OkHttp ,
.followSslRedirects(false)
.cookieJar(new LocalCookieJar()) // OkHttp Cookie
.build();
//CookieJar Cookie
class LocalCookieJar implements CookieJar{
List<Cookie> cookies;
@Override
public List<Cookie> loadForRequest(HttpUrl arg0) {
if (cookies != null)
return cookies;
return new ArrayList<Cookie>();
}
@Override
public void saveFromResponse(HttpUrl arg0, List<Cookie> cookies) {
this.cookies = cookies;
}
}
왜 CookieJar 를 설치 하면 자동 으로 Cookie 를 휴대 할 수 있 습 니까?OkHttp 소스 코드 보 여 드릴 게 요.
/**
* Populates request with defaults and cookies.
*
* <p>This client doesn't specify a default {@code Accept} header because it doesn't know what
* content types the application is interested in.
*/
private Request networkRequest(Request request) throws IOException {
Request.Builder result = request.newBuilder();
// CookieJar Cookie , Cookie
List<Cookie> cookies = client.cookieJar().loadForRequest(request.url());
if (!cookies.isEmpty()) {
result.header("Cookie", cookieHeader(cookies));
}
return result.build();
}
그래서 이제 저희 가 POST 요청 을 하 게 되 었 습 니 다.
final OkHttpClient client = new OkHttpClient().newBuilder()
.followRedirects(false)
.followSslRedirects(false)
.cookieJar(new LocalCookieJar())
.build();
// POST
RequestBody body = new FormBody.Builder().add("UserStyle", "student")
.add("user", "xxx").add("password", "xxx").build();
Request request = new Request.Builder().url("http://222.195.8.201/pass.asp").post(body).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) throws IOException {
/**
* CookieJar, Set-Cookie , addHeader("Cookie", cookie)
* Cookie
*/
// List<String> cookies = response.headers("Set-Cookie");
// String cookie = "";
// for(int i=cookies.size()-1; i>=0; i--){
// cookie = cookie+ cookies.get(i).replace("path=/", "") + " ";
// }
// GET
Request redirectRequest = new Request.Builder().url("http://222.195.8.201/student/asp/Select_Success.asp")
// .addHeader("Cookie", cookie)
.build();
//
Response response2 = client.newCall(redirectRequest).execute();
String result = response2.body().string();
System.out.println(result);
}
@Override
public void onFailure(Call arg0, IOException arg1) {
}
});
내용 을 받 으 면 스스로 내용 의 해석 과 전 시 를 할 수 있 습 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Volley, OkHttp, Retroffit로 비동기 통신을 각각 쓸 때의 초간단 견본Apache HTTP 클라이언트는 안드로이드 6.0에서 폐지됩니다.특히 구글이 제공하는 커뮤니케이션 라이브러리'볼리'가 이 영향을 받았다. 내가 이전에 일했던 응용 프로그램도 기본적으로 모두 Volley를 사용했다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.