Dear all,
I've got a little progress about the parsing content problem.
Finally I find out that if I don't copy the "User-Agent" request header from
the original request to the contentexchange, I could be able to parse the
response content from the back end server correctly. Codes are as follows:
// copy headers
    boolean xForwardedFor = false;
    boolean hasContent = false;
    long contentLength = -1;
    Enumeration<?> enm = request.getHeaderNames();
    while (enm.hasMoreElements()) {
     // TODO could be better than this!
     String hdr = (String) enm.nextElement();
     String lhdr = hdr.toLowerCase();
     String value=request.getHeader(hdr);
     System.out.println("HeaderName:["+hdr+"] Value:["+value+"]");

     if (_DontProxyHeaders.contains(lhdr))
      continue;
     if (connectionHdr != null
       && connectionHdr.indexOf(lhdr) >= 0)
      continue;
     if (_hostHeader != null && "host".equals(lhdr))
      continue;
     if ("user-agent".equals(lhdr))
     continue;
     if ("content-type".equals(lhdr))
      hasContent = true;
     else if ("content-length".equals(lhdr)) {
      contentLength = request.getContentLength();
      
exchange.setRequestHeader(HttpHeaders.CONTENT_LENGTH,Long.toString(contentLength));
      if (contentLength > 0)
       hasContent = true;
      //add here
      continue;
     } else if ("x-forwarded-for".equals(lhdr))
      xForwardedFor = true;

     Enumeration<?> vals = request.getHeaders(hdr);
     while (vals.hasMoreElements()) {
      String val = (String) vals.nextElement();
      if (val != null) {
       if (debug != 0)
        _log.debug(debug + " " + hdr + ": " + val);
       exchange.setRequestHeader(hdr, val);
      }
     }
    }

But if I don't copy "User-Agent" request header to exchange, I got new
problems. The browser couldn't receive the response content.
Do anyone knows how to solve this problem?
Thank you very much.

Regards!
Santa

2011/3/22 黄志兰 <[email protected]>

> Dear all,
> Sorry for bothering. I'm new in jetty. Now I'm working on a task, I have to
> change jetty ProxyServlet a little bit. So as to make it availbale for our
> whole project.
> What I have to do is to change the content that Jetty Proxy get from the
> backend server. And forward it back to the client.
> I got problem when doing this. It seem that the byte array that I get from
> ContentExchange couldn't transfer to String correctly.
> I've try the following codes:
> ContentExchange exchange = new ContentExchange() {
>      protected void onResponseComplete() throws IOException {
>       super.onResponseComplete();
>       //do something with the response content
>       String responseContent = this.getResponseContent();
>       System.out.println(responseContent); // this prints messy code in
> console.
>        byte[] responseContentBytes = this.getResponseContentBytes();
>        System.out.println(new String (responseContentBytes,"UTF-8")); //
> Still prints out messy code, the html's charset is UTF-8
>      }
>
>
> I test the following code in my developing environment, it works well:
> public static void main1(String[] args) throws Exception {
>         HttpClient httpClient = new HttpClient();
>         // set up httpClient
>         httpClient.start();
>         ContentExchange contentExchange = new ContentExchange();
>         httpClient.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL);
>
>         contentExchange.setURL("http://www.google.com.hk";);
>         httpClient.send(contentExchange);
>         contentExchange.waitForDone();
>         System.err.println("Response status: "
>                 + contentExchange.getResponseStatus());
>         byte[] responseContentBytes =
> contentExchange.getResponseContentBytes();
>         System.out.println(new String (responseContentBytes,"UTF-8"));
>     }
>
> So, my question is: what cause the messy code problem? How can I resolve
> the response content from ContentExchange's getResponseContentBytes() or
> getResponseContent() correctly?
>
> Thanks very much!
> Regards!
> Santa
>
_______________________________________________
jetty-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/jetty-users

Reply via email to