Okhttp 소스 코드
Request: 변경 할 수 없 는 요청 입 니 다.url method headers body 포함.
Request 에 정적 클래스 Builder 속성 url method headers body 가 있 습 니 다.
구조 방법:
public Builder() {
this.method = "GET";
this.headers = new Headers.Builder();//
}
Builder(Request request) {
this.url = request.url;
this.method = request.method;
this.body = request.body;
this.tag = request.tag;
this.headers = request.headers.newBuilder();
}
Builder 정적 클래스 방법: (Builder 를 되 돌려 주 는 형식 으로)
public Builder url(HttpUrl url) {}
public Builder url(String url) {}
public Builder url(URL url) {}
//
public Builder header(String name, String value) {}
//
public Builder addHeader(String name, String value) {}
//
public Builder removeHeader(String name) {}
//--------------------------------------
//
public Builder get() {}
public Builder post(RequestBody body) {}
public Builder delete(RequestBody body) {}
public Builder delete(){}
public Builder put(RequestBody body) {}
public Builder patch(RequestBody body) {}
public Builder method(String method, RequestBody body) {}
// Request
public Request build() {}
Requst 방법:
//
public Headers headers() {}
//
public String header(String name) {}
//
public List headers(String name) {}
// body
public RequestBody body() { return body;}
// Builder
public Builder newBuilder() {}
RequestBody: 요청 체 는 추상 적 인 클래스 입 니 다.
방법:
abstract contentType()//
public long contentLength() throws IOException {return -1;}//
public abstract void writeTo(BufferedSink sink) throws IOException;//
// body "UTF-8"
`public static RequestBody create(MediaType contentType, String content) {}
// RequestBody
public static RequestBody create(final MediaType contentType, final ByteString content) {}
// RequestBody ,
public static RequestBody create(final MediaType contentType, final byte[] content,
final int offset, final int byteCount) {}
// RequestBody ,
public static RequestBody create(final MediaType contentType, final File file) {}
응답 응답
ResponseBody 응답 (추상 클래스)
`
Call: 실행 할 호출 준비 (인터페이스)
Request request();//
Response execute() throws IOException;//
void enqueue(Callback responseCallback);//
boolean isExecuted();//
boolean isCanceled();//
Call clone();//clone
interface Factory {
Call newCall(Request request);}
웹 소켓 인터페이스
네 가지 상태: 연결 열기 닫 기 닫 기 취소
Request request();//
long queueSize();//
boolean send(String text);
boolean send(ByteString bytes);
boolean close(int code, String reason);
void cancel();
interface Factory {
WebSocket newWebSocket(Request request, WebSocketListener listener);}
RealCall
implements 호출 인터페이스
Callback: 인터페이스
onFailure 연결 실패 onResponse 연결 성공
Authenticator: 인터페이스
Request authenticate(Route route, Response response) throws IOException;//
Headers:
헤드 정 보 는 키 쌍 으로 구성 되 어 해당 정 보 를 전달 할 수 있 습 니 다. 속성 이 있 습 니 다.
String[] namesAndValues;
과 Builder builder
구조 방법`Headers(Builder builder) {
this.namesAndValues = builder.namesAndValues.toArray(new String[builder.namesAndValues.size()]);
}
private Headers(String[] namesAndValues) {
this.namesAndValues = namesAndValues;
}`
방법.
// 。
private static String get(String[] namesAndValues, String name) {
for (int i = namesAndValues.length - 2; i >= 0; i -= 2) {
if (name.equalsIgnoreCase(namesAndValues[i])) {
return namesAndValues[i + 1];
}
}
return null;
}
호출 방법:
public String get(String name){}//
public Date getDate(String name) {}//
public int size() {}//
public String name(int index) {}// index
public String value(int index) {}// index
public Set names() {}//
public List values(String name) {}//
public Builder newBuilder() {}// Builder
// Headrs ( )
public static Headers of(Map headers) {
if (headers == null) throw new NullPointerException("headers == null");
// Make a defensive copy and clean it up.
String[] namesAndValues = new String[headers.size() * 2];
int i = 0;
for (Map.Entry header : headers.entrySet()) {
if (header.getKey() == null || header.getValue() == null) {
throw new IllegalArgumentException("Headers cannot be null");
}
String name = header.getKey().trim();
String value = header.getValue().trim();
if (name.length() == 0 || name.indexOf('\0') != -1 || value.indexOf('\0') != -1) {
throw new IllegalArgumentException("Unexpected header: " + name + ": " + value);
}
namesAndValues[i] = name;
namesAndValues[i + 1] = value;
i += 2;
}
return new Headers(namesAndValues); }
Builder 정적 내부 클래스:
//
public Builder add(String name, String value) {
checkNameAndValue(name, value);//
return addLenient(name, value);
}
//
Builder addLenient(String name, String value) {
namesAndValues.add(name);
namesAndValues.add(value.trim());
return this;
}
// 。
public Builder removeAll(String name) {
for (int i = 0; i < namesAndValues.size(); i += 2) {
if (name.equalsIgnoreCase(namesAndValues.get(i))) {
namesAndValues.remove(i); // name
namesAndValues.remove(i); // value
i -= 2;
}
}
return this;
}
// 。
public Builder set(String name, String value) {
checkNameAndValue(name, value);
removeAll(name);
addLenient(name, value);
return this;
}
// 。
public String get(String name) {
for (int i = namesAndValues.size() - 2; i >= 0; i -= 2) {
if (name.equalsIgnoreCase(namesAndValues.get(i))) {
return namesAndValues.get(i + 1);
}
}
return null;
}
// Header 。
public Headers build() {
return new Headers(this);
}
연결 인터페이스
Route route();//
Socket socket();// socket
Handshake handshake();//
Protocol protocol();//
커 넥 션 풀 연결 풀
ConnectionSpec 연결 규범
Route
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.