📄 ajpsampler.java
字号:
body = new FileInputStream(input);
setString(HEADER_CONTENT_DISPOSITION);
setString("form-data; name=\""+encode(getFileField())+
"\"; filename=\"" + encode(fn) +"\""); //$NON-NLS-1$ //$NON-NLS-2$
String mt = getMimetype();
hbuf.append(HEADER_CONTENT_TYPE).append(COLON_SPACE).append(mt).append(NEWLINE);
setInt(0xA007); // content-type
setString(mt);
} else {
hbuf.append(HEADER_CONTENT_TYPE).append(COLON_SPACE).append(APPLICATION_X_WWW_FORM_URLENCODED).append(NEWLINE);
setInt(0xA007); // content-type
setString(APPLICATION_X_WWW_FORM_URLENCODED);
StringBuffer sb = new StringBuffer();
boolean first = true;
PropertyIterator args = getArguments().iterator();
while(args.hasNext()) {
JMeterProperty arg = args.next();
if(first) {
first = false;
} else {
sb.append('&');
}
sb.append(arg.getName()).append('=').append(arg.getStringValue());
}
byte [] sbody = sb.toString().getBytes(); //FIXME - encoding
cl = sbody.length;
body = new ByteArrayInputStream(sbody);
}
hbuf.append(HEADER_CONTENT_LENGTH).append(COLON_SPACE).append(String.valueOf(cl)).append(NEWLINE);
setInt(0xA008); // Content-length
setString(String.valueOf(cl));
}
if(auth != null) {
String authHeader = auth.getAuthHeaderForURL(url);
if(authHeader != null) {
setInt(0xA005); // Authorization
setString(authHeader);
hbuf.append(HEADER_AUTHORIZATION).append(COLON_SPACE).append(authHeader).append(NEWLINE);
}
}
return hbuf.toString();
}
private String encode(String value) {
StringBuffer newValue = new StringBuffer();
char[] chars = value.toCharArray();
for (int i = 0; i < chars.length; i++)
{
if (chars[i] == '\\')//$NON-NLS-1$
{
newValue.append("\\\\");//$NON-NLS-1$
}
else
{
newValue.append(chars[i]);
}
}
return newValue.toString();
}
private void setConnectionCookies(URL url, CookieManager cookies) {
if(cookies != null) {
CollectionProperty coll = cookies.getCookies();
PropertyIterator i = coll.iterator();
while(i.hasNext()) {
JMeterProperty header = i.next();
setInt(0xA009); // Cookie
setString(header.getName()+"="+header.getStringValue());//$NON-NLS-1$
}
}
}
private int translateHeader(String n) {
for(int i=0; i < headerTransArray.length; i++) {
if(headerTransArray[i].equalsIgnoreCase(n)) {
return i+1;
}
}
return -1;
}
private void setByte(byte b) {
outbuf[outpos++] = b;
}
private void setInt(int n) {
outbuf[outpos++] = (byte)((n >> 8)&0xff);
outbuf[outpos++] = (byte) (n&0xff);
}
private void setString(String s) {
if( s == null ) {
setInt(0xFFFF);
} else {
int len = s.length();
setInt(len);
for(int i=0; i < len; i++) {
setByte((byte)s.charAt(i));
}
setByte((byte)0);
}
}
private void send() throws IOException {
OutputStream os = channel.getOutputStream();
int len = outpos;
outpos = 0;
setInt(0x1234);
setInt(len-4);
os.write(outbuf, 0, len);
}
private void execute(String method, HTTPSampleResult res)
throws IOException {
send();
if(method.equals(POST)) {
sendPostBody();
}
handshake(res);
}
private void handshake(HTTPSampleResult res) throws IOException {
responseData.reset();
int msg = getMessage();
while(msg != 5) {
if(msg == 3) {
int len = getInt();
responseData.write(inbuf, inpos, len);
} else if(msg == 4) {
parseHeaders(res);
} else if(msg == 6) {
setNextBodyChunk();
send();
}
msg = getMessage();
}
}
private void sendPostBody() throws IOException {
setNextBodyChunk();
send();
}
private void setNextBodyChunk() throws IOException {
int len = body.available();
if(len < 0) {
len = 0;
} else if(len > MAX_SEND_SIZE) {
len = MAX_SEND_SIZE;
}
outpos = 4;
int nr = 0;
if(len > 0) {
nr = body.read(outbuf, outpos+2, len);
}
setInt(nr);
outpos += nr;
}
private void parseHeaders(HTTPSampleResult res)
throws IOException {
int status = getInt();
res.setResponseCode(Integer.toString(status));
res.setSuccessful(200 <= status && status <= 399);
String msg = getString();
res.setResponseMessage(msg);
int nh = getInt();
StringBuffer sb = new StringBuffer();
sb.append(HTTP_1_1 ).append(status).append(" ").append(msg).append(NEWLINE);//$NON-NLS-1$//$NON-NLS-2$
for(int i=0; i < nh; i++) {
// Currently, no Tomcat version sends translated headers
String name;
int thn = peekInt();
if((thn & 0xff00) == AJP_HEADER_BASE) {
name = headerTransArray[(thn&0xff)-1];
} else {
name = getString();
}
String value = getString();
if(HEADER_CONTENT_TYPE.equalsIgnoreCase(name)) {
res.setContentType(value);
res.setEncodingAndType(value);
} else if(HEADER_SET_COOKIE.equalsIgnoreCase(name)) {
CookieManager cookies = getCookieManager();
if(cookies != null) {
cookies.addCookieFromHeader(value, res.getURL());
}
}
sb.append(name).append(COLON_SPACE).append(value).append(NEWLINE);
}
res.setResponseHeaders(sb.toString());
}
private int getMessage() throws IOException {
InputStream is = channel.getInputStream();
inpos = 0;
int nr = is.read(inbuf, inpos, 4);
if(nr != 4) {
channel.close();
channel = null;
throw new IOException("Connection Closed: "+nr);
}
//int mark =
getInt();
int len = getInt();
int toRead = len;
int cpos = inpos;
while(toRead > 0) {
nr = is.read(inbuf, cpos, toRead);
cpos += nr;
toRead -= nr;
}
return getByte();
}
private byte getByte() {
return inbuf[inpos++];
}
private int getInt() {
int res = (inbuf[inpos++]<<8)&0xff00;
res += inbuf[inpos++]&0xff;
return res;
}
private int peekInt() {
int res = (inbuf[inpos]<<8)&0xff00;
res += inbuf[inpos+1]&0xff;
return res;
}
private String getString() throws IOException {
int len = getInt();
String s = new String(inbuf, inpos, len, "iso-8859-1");//$NON-NLS-1$
inpos+= len+1;
return s;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -