[英]How can I send an HTTP GET with Java and print the QUERY_STRING environment variable with a CGI app written in C++?
[英]Java and CGI - how to properly parse a filename and a QUERY_STRING from a URL?
在Java中,我希望能夠解析一個URL,將其分解為文件名和QUERY_STRING。
到目前為止,我有以下代碼:
if (line != null && !line.trim().equals("")) {
StringTokenizer st = new StringTokenizer(line);
if (st.nextToken().equals("GET") && st.hasMoreTokens()) {
filename = st.nextToken();
if (filename.startsWith("/")) {
filename = filename.substring(1);
if (st.nextToken().equals(".cgi?") && st.hasMoreTokens()) {
queryString = st.nextToken();
}
}
}
}
我特別想做的是將URL分解為文件名和QUERY_STRING,因為我可以exec
調用以使用正確的環境變量運行我的cgi文件。 但是,我的解決方案不會在到達文件名之后的問號之前終止文件名。 有人可以在這里幫我嗎?
編輯:基本上,我想從HTTP請求中獲取URL,並從URL中獲取文件名和QUERY_STRING 。
這就是Java Servlet解析GET參數的方式
static public Hashtable parseQueryString(String s) {
String valArray[] = null;
if (s == null) {
throw new IllegalArgumentException();
}
Hashtable ht = new Hashtable();
StringBuffer sb = new StringBuffer();
StringTokenizer st = new StringTokenizer(s, "&");
while (st.hasMoreTokens()) {
String pair = (String)st.nextToken();
int pos = pair.indexOf('=');
if (pos == -1) {
// XXX
// should give more detail about the illegal argument
throw new IllegalArgumentException();
}
String key = parseName(pair.substring(0, pos), sb);
String val = parseName(pair.substring(pos+1, pair.length()), sb);
if (ht.containsKey(key)) {
String oldVals[] = (String []) ht.get(key);
valArray = new String[oldVals.length + 1];
for (int i = 0; i < oldVals.length; i++)
valArray[i] = oldVals[i];
valArray[oldVals.length] = val;
} else {
valArray = new String[1];
valArray[0] = val;
}
ht.put(key, valArray);
}
return ht;
}
當然,由於此方法是公共的,因此您可能只想直接使用HttpUtils :-)
更新:對於其他低級別的HTTP解析,我建議http://hc.apache.org/index.html或http://www.java2s.com/Code/Java/Network-Protocol/HttpParser.htm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.