심 플 한 아름다움 Jod-http--한 광주리 적용
16370 단어 http
Jod-Huttp 를 이해 하 는 가장 좋 은 방법 은 예시 프로그램 이다.
간단 한 GET 방법
HttpRequest httpRequest = HttpRequest.get("http://jodd.org");
HttpResponse response = httpRequest.send();
System.out.println(response);
이 코드 는 get 요청 을 실현 하고 응답 결 과 를 출력 합 니 다.
응답 결 과 를 살 펴 보 겠 습 니 다.
HTTP/1.1 200 OK
Date: Fri, 12 Jun 2015 02:43:50 GMT
Server: Apache
Last-Modified: Mon, 25 May 2015 21:44:44 GMT
Accept-Ranges: bytes
Content-Length: 14056
Cache-Control: max-age=0, public
Expires: Fri, 12 Jun 2015 02:43:50 GMT
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html>
<head>
..................................
...................................
</body>
</html>
다음 그림 과 결합 하여 이해 해 주세요.

너 도 이렇게 쓸 수 있다.
HttpResponse response = HttpRequest.get("http://jodd.org").send();
System.out.println(response);
또는 한 걸음 한 걸음 구축:
HttpRequest request = new HttpRequest();
request
.method("GET")
.protocol("http")
.host("srv")
.port(8080)
.path("/api/jsonws/user/get-user-by-id");
좋아,요청 한 스타일 을 알 아 보 자.

응답 메시지 읽 기
메 시 지 를 보 낸 후 응답 메 시 지 를 HttpResponse 인 스 턴 스 에 저장 하면 HttpResponse 방법 으로 status Code,
statusPhrase 。
를 얻 을 수 있 습 니 다.메시지 자 체 를 읽 는 방법 은 주로 세 가지 가 있 습 니 다.
body()-보통 ISO-8859-1 인 코딩 형식의 기본 메시지 내용 입 니 다.
bodyText()-메시지 헤더'Content-type'속성 값 의 인 코딩 형식 에 따라 컴 파일 된 메시지 입 니 다.
BodyByte()-저장 할 파일 을 다운로드 하 는 등 바이트 배열 로 되 돌아 오 는 기본 메시지 입 니 다.
메모:bodyText()방법 을 사용 하기 전에 charset()방법 으로 인 코딩 형식 을 지정 해 야 합 니 다.
조회 매개 변수
get 방법 에서 조회 파 라 메 터 는 url 에서 지정 할 수 있 습 니 다(정확 한 인 코딩 이 필요 합 니 다).예 를 들 어:
HttpResponse response = HttpRequest
.get("http://srv:8080/api/jsonws/user/get-user-by-id?userId=10194")
.send();
또는 query()방법 으로 설정 합 니 다.예 를 들 어:
HttpResponse response = HttpRequest
.get("http://srv:8080/api/jsonws/user/get-user-by-id")
.query("userId", "10194")
.send();
하나의 매개 변 수 를 설정 하면 query()방법 을 사용 하거나 매개 변수 마다 query()방법 을 호출 할 수 있 습 니 다.
물론 맵
메모:조회 매개 변수(메시지 헤더 나 폼 매개 변수)는 중복 할 수 있 습 니 다.내부 에 그것들 은 배열 에 저장 되 어 있다.removeQuery 방법 을 사용 하여 파 라 메 터 를 삭제 하거나 query 방법 을 여러 번 호출 하여 파 라 메 터 를 교체 합 니 다.
query 는 모든 내부 인 자 를 읽 을 수 있 습 니 다:
Map<String, Object[]> httpParams = request.query();
httpParams.put("userId", new String[] {"10194"});
기본 인증
기본 인증 은 매우 간단 합 니 다.
request.basicAuthentication("test", "test");
post 방법 과 폼 매개 변수
get 방법 중의 query 와 유사 합 니 다:
HttpResponse response = HttpRequest
.post("http://srv:8080/api/jsonws/user/get-user-by-id")
.form("userId", "10194")
.send();
post 방법 에서 폼 인 자 를 form 으로 지정 하 는 것 을 알 수 있 습 니 다.form 사용 방법 은 query 사용 방법 과 완전히 같 습 니 다.
파일 업로드
마찬가지 로 파일 을 form 매개 변수 에 추가 하기 도 쉽 습 니 다.예 는 다음 과 같다.
HttpRequest httpRequest = HttpRequest
.post("http://srv:8080/api/jsonws/dlapp/add-file-entry")
.form(
"repositoryId", "10178",
"folderId", "11219",
"sourceFileName", "a.zip",
"mimeType", "application/zip",
"title", "test",
"description", "Upload test",
"changeLog", "testing...",
"file", new File("d:\\a.jpg.zip")
);
HttpResponse httpResponse = httpRequest.send();
위 에 코드 가 전부 야.
파일 업로드 진행 모니터링
큰 파일 을 업로드 할 때 업로드 진 도 를 감시 해 야 합 니 다.
HttpProgressListener :
HttpResponse response = HttpRequest
.post("http://localhost:8081/hello")
.form("file", file)
.monitor(new HttpProgressListener() {
@Override
public void transferred(long len) {
System.out.println(len/size);
}
})
.send();
파일 업로드 전,
HttpProgressListener callbackSize--- 。 1% 。 , 512 。
HttpProgressListener size, 。 : size , , size ( )。
메시지 헤더
메시지 헤더 인 자 를 추가 하거나 가 져 오 면 header()방법 을 사용 할 수 있 습 니 다.일부 일반적인 메시지 헤더 매개 변 수 는 이미 정의 되 었 기 때문에 contentType()등 유사 한 방법 으로 조회 할 수 있 습 니 다.
압축,압축 해제 메시지
unzip()압축 해제 메시지 예제 사용 하기
HttpResponse response = HttpRequest
.get("http://www.liferay.com")
.acceptEncoding("gzip")
.send();
System.out.println(response.unzip());
body 방법 사용 하기
요청 메시지 의 내용 을 수 동 으로 설정 할 수 있 습 니 다.일부 api 는 body 에서 유사 한 명령 을 가리 킬 수 있 습 니 다.
HttpResponse response = HttpRequest
.get("http://srv:8080/api/jsonws/invoke")
.body("{'$user[userId, screenName] = /user/get-user-by-id' : {'userId':'10194'}}")
.basicAuthentication("test", "test")
.send();
body 를 설정 한 후 위의 form()방법 을 버 리 고 파 라 메 터 를 설정 할 수 있 습 니 다.
그러나 HttpResponse 에서 body()방법 으로 메시지 내용 을 받 아들 이 는 것 이 더욱 의미 가 있다.
문자 와 인 코딩 형식
기본적으로 query 와 form 인 자 는 utf-8 인 코딩 을 사용 합 니 다.전역 적 으로 JoddHttp 를 통 해 다시 설정 하거나 부분 적 으로 다음 과 같 습 니 다.
HttpResponse response = HttpRequest
.get("http://server/index.html")
.queryEncoding("CP1251")
.query("param", "value")
.send();
물론 form 의 인 코딩 형식 을 비슷 한 방식 으로 설정 할 수 있 습 니 다.더 나 아가 폼 을 제출 할 때 메시지 헤더'Content-type'의 값 을 감지 하고 존재 하면 이 값 을 사용 합 니 다.메 시 지 를 받 을 때 body()방법 은 보통 ISO-8859-1 인 코딩 형식의 메 시 지 를 되 돌려 줍 니 다.지정 한 형식 으로 돌아 가 려 면 bodyText()방법 을 사용 할 수 있 습 니 다.이 때 인 코딩 형식 인'Content-type'의 값 을 미리 설정 해 야 합 니 다.
HttpConnection
HttpConnection 은 http 물리 통신 의 인 터 페 이 스 를 봉인 하고 send()방법 을 호출 할 때 http 는 open()을 연결 합 니 다(이 연결 이 존재 하지 않 을 때).내부 에 HttpConnectionProvier 가 이 연결 을 만 듭 니 다.이전 글(간략 한 미 Jod-http--깊이 있 는 소스 이해 http 프로 토 콜)을 참조 하 십시오.기본 연결 공급 자 는 socket 기반 입 니 다.새로 만 든 SocketHttpConnection 인 스 턴 스 를 되 돌려 줍 니 다.이 인 스 턴 스 는 열 린 socket 을 간단하게 포장 합 니 다.사용자 정의 HttpConnection Provider 를 사용 할 수도 있 습 니 다.예 를 들 어 SocketHttpConnection Provider 를 확장 하고 createScket()방법 을 다시 써 서 socket 풀 에서 socket 을 되 돌려 주거 나 만 료 된 시간 이 다른 socket 을 되 돌려 줄 수도 있 습 니 다.
Socket
상기 와 같이 http 통신 은 일반적인 socket 을 통 해 이 루어 집 니 다.따라서 데 이 터 를 보 내기 전에 socket 의 행동 을 바 꿀 수 있 습 니 다.http 가 socket 행 위 를 어떻게 바 꾸 는 지 보 여 줍 니 다.
SocketHttpConnection
httpConnection 을 통 해 socket 호출:
HttpRequest request = HttpRequest.get()...;
request.open();
SocketHttpConnection httpConnection =
(SocketHttpConnection) request.httpConnection();
Socket socket = httpConnection.getSocket();
socket.setSoTimeout(1000);
...
HttpResponse response = request.send();
SocketHttpConnectionProvider
또 다른 방법 은 SocketHttpConnection Provider 로 자신의 provider 를 만 드 는 것 입 니 다.
public class MyConnectionProvider extends SocketHttpConnectionProvider {
protected Socket createSocket(
SocketFactory socketFactory, String host, int port)
throws IOException {
Socket socket = super.createSocket(socketFactory, host, port);
socket.setSoTimeout(1000);
return socket;
}
}
그리고 open 방법 으로 socket 가 져 오기
HttpConnectionProvider connectionProvider = new MyConnectionProvider();
...
HttpRequest request = HttpRequest.get()...;
HttpResponse response = request.open(connectionProvider).send();
모든 통신 에 사용자 정의 connection Provider 의 기본 Connection Provider 를 설정 하려 면 JoddHttp.httpConnection Provider 에 게 open()방법 을 명시 적 으로 호출 하지 않 아 도 됩 니 다.
지속 연결(keep-alive)
기본적으로 모든 연결 이 닫 혔 습 니 다.http 연결 을 keep-alive 모드 로 설정 하여 연결 이 계속 존재 하도록 합 니 다.keep-alive 모드 에서 통신 세 션 에서 첫 번 째 요청 시 HttpConnection 을 열 고 이 연결 을 다시 사용 합 니 다.필요 하지 않 으 면 socket 이 다시 열 리 지 않 기 때문에 여러 request 에 의 해 중복 사용 할 수 있 습 니 다.
할 수 있 는 방법 은 많 지만 가장 간단 한 방법 은 다음 과 같다.
HttpRequest request = HttpRequest.get("http://jodd.org");
HttpResponse response = request.connectionKeepAlive(true).send();
// next request
request = HttpRequest.get("http://jodd.org/jodd.css");
response = request.keepAlive(response, true).send();
...
// last request
request = HttpRequest.get("http://jodd.org/jodd.png");
response = request.keepAlive(response, false).send();
// optionally
//response.close();
대리
HttpConnectionProvider 는 프 록 시 정보(유형,주소,포트,사용자 이름,비밀번호)를 가리 키 는 ProxyInfo 인 스 턴 스 만 제공 하면 됩 니 다.HTTP/SOCKKS 4/SOCKET 5 세 가지 유형 을 지원 합 니 다.그 차이 점 은:
SOCKS:방화벽 보안 세 션 변환 프로 토 콜(Socks:Protocol for sessions traversal across firewall securely)Socks 프로 토 콜 은 TCP 와 UDP 도 메 인 에 있 는 클 라 이언 트/서버 응용 프로그램 이 네트워크 방화벽 이 제공 하 는 서 비 스 를 더욱 편리 하고 안전하게 사용 할 수 있 는 프레임 워 크 를 제공 합 니 다.이 프로 토 콜 은 개념 적 으로 응용 층 과 전송 층 사이 에 있 는'중개 층(shim-layer)'이기 때문에 ICMP 정보 전달 과 같은 네트워크 계층 게 이 트 웨 이 서 비 스 를 제공 하지 않 습 니 다.Socks 4 와 Socks 5 는 모두 Socks 프로 토 콜 에 속 하지만 지원 하 는 구체 적 인 응용 에 따라 차이 가 있 습 니 다.Socks 4 프 록 시 는 TCP 애플 리 케 이 션 만 지원 하고 Socks 5 프 록 시 는 TCP 와 UDP 두 가지 애플 리 케 이 션 을 지원 합 니 다.그러나 Socks 5 프 록 시 는 각종 인증 체제,서버 엔 드 도 메 인 이름 분석 등 을 지원 합 니 다.반면 Socks 4 대 리 는 없 기 때문에 대외 적 으로 개방 되 는 Socks 대 리 는 모두 Socks 4 대리 이다.따라서 UDP 애플 리 케 이 션 은 일반적으로 지원 되 지 않 는 다.즉,Socks 4 가 할 수 있 는 Socks 5 는 다 할 수 있 지만,Socks 5 가 할 수 있 는 것 은 Socks 4 가 꼭 다 할 수 있 는 것 은 아니다.
입력 흐름 분석
HttpRequest 와 HttpResponse 는 입력 흐름 을 읽 는 방법 readFrom(InputStream)를 실현 합 니 다.서버 가 요청 을 어떻게 읽 는 지 예 를 들 어 설명 한다.
HttpBrowser
대상 주 소 를 바 꾸 어'이동'장면 을 모 의 해 야 할 때 요청 을 보 내 고 응답 을 받 는 것 만 으로 는 부족 합 니 다.예 를 들 어 로그 인 은 현재 session 에서 서로 다른 대상 주소 의 내용 을 읽 어야 합 니 다.
Http Browser 는 이런 기능 을 완성 할 수 있 습 니 다.이 는 요청 을 보 내 고 301 과 302 점프 를 자동 으로 처리 하 며 응답 메시지 에서 cookies 를 읽 고 새로운 요청 메시지 에 저장 하 는 등 을 읽 습 니 다.간단 한 예 는 다음 과 같다.
HttpBrowser browser = new HttpBrowser();
HttpRequest request = HttpRequest.get("www.facebook.com");
browser.sendRequest(request);
// request is sent and response is received
// process the page:
String page = browser.getPage();
// create new request
HttpRequest newRequest = HttpRequest.post(formAction);
browser.sendRequest(newRequest);
HttpTunnel
jod-Huttp 는 http 터널 을 유연 하 게 구축 하 는 방법(간단 한 에이전트 와 목적 주소 의 터널)을 제공 합 니 다.Http Tunnel 은 이 기능 을 실현 합 니 다.
참고 문헌:
【1】 http://jodd.org/doc/http.html
【2】http://www.it165.net/admin/html/201403/2541.html
【3】http://www.cnblogs.com/skynet/archive/2010/12/11/1903347.html
【4】http://www.ccproxy.com/socks4-yu-socks5-de-qu-bie-jie-shao.htm
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
빠른 팁: SingleStoreDB의 데이터 API 사용SingleStoreDB는 HTTP 연결을 통해 SQL 문을 실행하는 데 사용할 수 있는 을 제공합니다. 이 짧은 문서에서는 이 데이터 API를 사용하는 방법에 대한 예를 보여줍니다. A는 무료 SingleStore...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.