You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by ms...@apache.org on 2004/04/03 22:32:40 UTC
cvs commit: jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/sampler HTTPSampler.java
mstover1 2004/04/03 12:32:40
Modified: src/protocol/http/org/apache/jmeter/protocol/http/proxy Tag:
rel-2_0 Proxy.java
src/protocol/http/org/apache/jmeter/protocol/http/sampler
Tag: rel-2_0 HTTPSampler.java
Log:
Fixing proxy + gzip bug. Some pointless refactorings.
Revision Changes Path
No revision
No revision
1.17.2.2 +28 -3 jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Proxy.java
Index: Proxy.java
===================================================================
RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Proxy.java,v
retrieving revision 1.17.2.1
retrieving revision 1.17.2.2
diff -u -r1.17.2.1 -r1.17.2.2
--- Proxy.java 2 Apr 2004 23:41:52 -0000 1.17.2.1
+++ Proxy.java 3 Apr 2004 20:32:40 -0000 1.17.2.2
@@ -166,7 +166,8 @@
{
try
{
- out.write((res.getResponseHeaders()+"\n").getBytes());
+ String responseHeaders = massageResponseHeaders(res,res.getResponseHeaders());
+ out.write((responseHeaders+"\n").getBytes());
out.write(res.getResponseData());
out.flush();
log.debug("Done writing to client");
@@ -187,6 +188,30 @@
log.warn("Error while closing socket", ex);
}
}
+ }
+
+ /**
+ * In the event the content was gzipped and unpacked, the content-encoding header must be
+ * removed and the content-length header should be corrected.
+ * @param res
+ * @param headers
+ * @return
+ */
+ private String massageResponseHeaders(SampleResult res,String headers)
+ {
+ int encodingHeaderLoc = headers.indexOf(": gzip");
+ String newHeaders = headers;
+ if(encodingHeaderLoc > -1)
+ {
+ int end = headers.indexOf("\n",encodingHeaderLoc);
+ int begin = headers.lastIndexOf("\n",encodingHeaderLoc);
+ newHeaders = newHeaders.substring(0,begin) + newHeaders.substring(end);
+ int lengthIndex = newHeaders.indexOf("ength: ");
+ end = newHeaders.indexOf("\n",lengthIndex);
+ newHeaders = newHeaders.substring(0,lengthIndex+7) + res.getResponseData().length +
+ newHeaders.substring(end);
+ }
+ return newHeaders;
}
/**
No revision
No revision
1.91.2.1 +22 -11 jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampler.java
Index: HTTPSampler.java
===================================================================
RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampler.java,v
retrieving revision 1.91
retrieving revision 1.91.2.1
diff -u -r1.91 -r1.91.2.1
--- HTTPSampler.java 21 Mar 2004 04:20:25 -0000 1.91
+++ HTTPSampler.java 3 Apr 2004 20:32:40 -0000 1.91.2.1
@@ -303,17 +303,28 @@
for (int i= 1; conn.getHeaderFieldKey(i) != null; i++)
{
- if (!conn //TODO - why is this not saved?
- .getHeaderFieldKey(i)
- .equalsIgnoreCase("transfer-encoding"))
- {
- headerBuf.append(conn.getHeaderFieldKey(i));
- headerBuf.append(": ");
- headerBuf.append(conn.getHeaderField(i));
- headerBuf.append("\n");
- }
+ modifyHeaderValues(conn,i, headerBuf);
}
return headerBuf.toString();
+ }
+
+ /**
+ * @param conn
+ * @param headerBuf
+ * @param i
+ */
+ protected void modifyHeaderValues(HttpURLConnection conn, int headerIndex, StringBuffer resultBuf)
+ {
+ if ("transfer-encoding" //TODO - why is this not saved? A: it might be a proxy server specific field.
+ // If JMeter is using a proxy, the browser wouldn't know about that.
+ .equalsIgnoreCase(conn.getHeaderFieldKey(headerIndex)))
+ {
+ return;
+ }
+ resultBuf.append(conn.getHeaderFieldKey(headerIndex));
+ resultBuf.append(": ");
+ resultBuf.append(conn.getHeaderField(headerIndex));
+ resultBuf.append("\n");
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org