
org.globus.util.http.HttpResponse Maven / Gradle / Ivy
The newest version!
/*
* Copyright 1999-2010 University of Chicago
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is
* distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
*
* See the License for the specific language governing permissions and limitations under the License.
*/
package org.globus.util.http;
import java.io.InputStream;
import java.io.IOException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class HttpResponse {
private static Log logger =
LogFactory.getLog(HttpResponse.class.getName());
protected InputStream input;
protected long charsRead = 0;
public String httpType = null;
public String httpMsg = null;
public int httpCode = -1;
public long contentLength = -1;
public String connection = null;
public String contentType = null;
public String server = null;
public boolean chunked = false;
public String location = null;
public HttpResponse(InputStream in) throws IOException {
input = in;
parse();
}
/**
* Read a line of text from the given Stream and return it
* as a String. Assumes lines end in CRLF.
*/
protected String readLine(InputStream in) throws IOException {
StringBuffer buf = new StringBuffer();
int c, length = 0;
while(true) {
c = in.read();
if (c == -1 || c == '\n' || length > 512) {
charsRead++;
break;
} else if (c == '\r') {
in.read();
charsRead+=2;
break;
} else {
buf.append((char)c);
length++;
}
}
charsRead += length;
return buf.toString();
}
public static String getRest(String line) {
int pos = line.indexOf(":");
if (pos == -1) {
return null;
} else
return line.substring(pos+1).trim();
}
public void parseHttp(String line) {
int p1 = line.indexOf(" ");
if (p1 == -1) {
return;
}
httpType = line.substring(0,p1);
int p2 = line.indexOf(" ",p1+1);
String tmp;
if (p2 == -1) {
tmp = line.substring(p2);
} else {
tmp = line.substring(p1,p2);
httpMsg = line.substring(p2).trim();
}
httpCode = Integer.parseInt(tmp.trim());
}
private void parse() throws IOException {
String line, tmp;
line = readLine(input);
if (logger.isTraceEnabled()) {
logger.trace(line);
}
parseHttp(line);
while ( (line=readLine(input)).length() != 0 ) {
if (logger.isTraceEnabled()) {
logger.trace(line);
}
tmp = getRest(line);
if (line.startsWith(HTTPProtocol.CONNECTION)) {
connection = tmp;
} else if (line.startsWith(HTTPProtocol.SERVER)) {
server = tmp;
} else if (line.startsWith(HTTPProtocol.CONTENT_TYPE)) {
contentType = tmp;
} else if (line.startsWith(HTTPProtocol.CONTENT_LENGTH)) {
contentLength = Long.parseLong(tmp.trim());
} else if (line.startsWith(HTTPProtocol.CHUNKED)) {
chunked = true;
} else if (line.startsWith(HTTPProtocol.LOCATION)) {
location = tmp;
}
}
}
/** Generates a string representation of the http header
*
* @return String
a string representation of the http header
*/
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append("Http : " + httpType + "\n");
buf.append("Message : " + httpMsg + "\n");
buf.append("Code : " + httpCode + "\n");
if (server != null) {
buf.append("Server : " + server + "\n");
}
buf.append("Length : " + contentLength + "\n");
buf.append("Chunked : " + chunked + "\n");
buf.append("Type : " + contentType + "\n");
if (connection != null) {
buf.append("Connection : " + connection + "\n");
}
if (location != null) {
buf.append("Location : " + location + "\n");
}
return buf.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy