我正在使用 Apache Commons HttpClient 3.1,我发现来自 Sun 的 HttpURLConnection 从流中删除了 100 个 Continues。
因此,因此我似乎无法获得 100 Continue,因为它们显然已被 Sun 的代码删除。
我无法继续使用 HttpClient 4.0,因为这需要对现有代码进行许多更改,因此解决方案必须是 3.1 或不冲突的东西。
有任何想法吗?
谢谢
我正在使用 Apache Commons HttpClient 3.1,我发现来自 Sun 的 HttpURLConnection 从流中删除了 100 个 Continues。
因此,因此我似乎无法获得 100 Continue,因为它们显然已被 Sun 的代码删除。
我无法继续使用 HttpClient 4.0,因为这需要对现有代码进行许多更改,因此解决方案必须是 3.1 或不冲突的东西。
有任何想法吗?
谢谢
我找到了解决方案!
覆盖 processStatusLine 并检查 100 的状态。
请记住,前 100 个是预期的(服务器告诉我可以继续 POST),就我而言,我可以放心地忽略那个。这样我就可以得到我的服务器正在响应的所有信息。
public class Counting100PostMethod extends PostMethod {
Logger log = Logger.getLogger(Counting100PostMethod.class);
boolean first100 = true;
public Counting100PostMethod() {
super();
}
public Counting100PostMethod(String s) {
super(s);
}
@Override
protected void processStatusLine(HttpState httpState, HttpConnection httpConnection) {
super.processStatusLine(httpState, httpConnection);
int status = getStatusCode();
if (status == 100) {
if (first100) {
first100 = false;
} else {
// can now increment counter
log.debug("Increment counter");
}
}
}
似乎这种行为是预期的,但被此问题拒绝:http ://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4396798 。