Using HttpClient to mimic a POST network request

View: New views
3 Messages — Rating Filter:   Alert me  

Using HttpClient to mimic a POST network request

by yccheok :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I try to mimic a network request send by a closed source application. The following is the network request snapshot captured from the closed source application :


- Http: Request, POST /%5bvUpJYKw4QvGRMBmhATUxRwv4JrU9aDnwNEuangVyy6OuHxi2YiY=%5dImage
    Command: POST
  - URI: /%5bvUpJYKw4QvGRMBmhATUxRwv4JrU9aDnwNEuangVyy6OuHxi2YiY=%5dImage?
     Location: /%5bvUpJYKw4QvGRMBmhATUxRwv4JrU9aDnwNEuangVyy6OuHxi2YiY=%5dImage
    ProtocolVersion: HTTP/1.1
  - ContentType:  application/x-www-form-urlencoded
     MediaType:  application/x-www-form-urlencoded
    Cache-Control:  no-cache
    Pragma:  no-cache
    UserAgent:  Mozilla/4.0 (Windows XP 5.1) Java/1.6.0_06
    Host:  www.xxx.com:20000
    Accept:  text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
    Connection:  keep-alive
    ContentLength:  164
    HeaderEnd: CRLF
  - payload: HttpContentType =  application/x-www-form-urlencoded
     [SORT]: 0,1,0,10,5,0,KL,0
     [FIELD]: 33,38,51,58,68,88,78,98,99,101,56,57,69,70,71,72,89,90,91,92,59,60,61,62,79,80,81,82
     [LIST]: 1155.KL,1295.KL,7191.KL,0097.KL,2267.KL


I use httpclient to mimic the above request.


/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    try {
        // TODO code application logic here
        HttpClient httpClient = new HttpClient();
        httpClient.getParams().setParameter(HttpMethodParams.USER_AGENT, "Mozilla/4.0 (Windows XP 5.1) Java/1.6.0_06");

        PostMethod post = new PostMethod("http://www.xxx.com:20000/%5bvUpJYKw4QvGRMBmhATUxRwv4JrU9aDnwNEuangVyy6OuHxi2YiY=%5dImage?");

        NameValuePair[] data = {
            new NameValuePair("SORT", "0,1,0,10,5,0,KL,0"),
            new NameValuePair("FIELD", "33,38,51,58,68,88,78,98,99,101,56,57,69,70,71,72,89,90,91,92,59,60,61,62,79,80,81,82"),
            new NameValuePair("LIST", "1155.KL,1295.KL,7191.KL,0097.KL,2267.KL")
        };
        post.setRequestBody(data);
        httpClient.executeMethod(post);
        System.out.println(post.getResponseBodyAsString());      
    }
    catch (Exception exp) {
        exp.printStackTrace();
    }
}


However, there are no respond from server side. I try to capture my own network request snapshot :

- Http: Request, POST /%5bvUpJYKw4QvGRMBmhATUxRwv4JrU9aDnwNEuangVyy6OuHxi2YiY=%5dImage
    Command: POST
  - URI: /%5bvUpJYKw4QvGRMBmhATUxRwv4JrU9aDnwNEuangVyy6OuHxi2YiY=%5dImage
     Location: /%5bvUpJYKw4QvGRMBmhATUxRwv4JrU9aDnwNEuangVyy6OuHxi2YiY=%5dImage
    ProtocolVersion: HTTP/1.1
    UserAgent:  Mozilla/4.0 (Windows XP 5.1) Java/1.6.0_06
    Host:  www.xxx.com:20000
    ContentLength:  234
  - ContentType:  application/x-www-form-urlencoded
     MediaType:  application/x-www-form-urlencoded
    HeaderEnd: CRLF
  - payload: HttpContentType =  application/x-www-form-urlencoded
     SORT: 0%2C1%2C0%2C10%2C5%2C0%2CKL%2C0
     FIELD: 33%2C38%2C51%2C58%2C68%2C88%2C78%2C98%2C99%2C101%2C56%2C57%2C69%2C70%2C71%2C72%2C89%2C90%2C91%2C92%2C59%2C60%2C61%2C62%2C79%2C80%2C81%2C82
     LIST: 1155.KL%2C1295.KL%2C7191.KL%2C0097.KL%2C2267.KL


It seems that there are two major different :

(1) URI

(2) payload

Is there anything I miss out in my httpclient code?


Thanks and Regards
Yan Cheng Cheok


     


---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@...
For additional commands, e-mail: httpclient-users-help@...


Parent Message unknown Re: Using HttpClient to mimic a POST network request

by yccheok :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I realize the reason why it doesn't work is because,

HttpClient perform URL encoding explicitly on my payload. If I try to

try {
    Socket socket = new Socket("www.xxx.com", 20000);
    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
    final String body = "[SORT]=0,1,0,10,5,0,KL,0&[FIELD]=33,38,51,58,68,88,78,98,99,101,56,57,69,70,71,72,89,90,91,92,59,60,61,62,79,80,81,82&[LIST]=1155.KL,1295.KL,7191.KL,0097.KL,2267.KL";
    final int length = body.length();
    final String s = "POST /%5bvUpJYKw4QvGRMBmhATUxRwv4JrU9aDnwNEuangVyy6OuHxi2YiY=%5dImage? HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nCache-Control: no-cache\r\nPragma: no-cache\r\nUser-Agent: Mozilla/4.0 (Windows XP 5.1) Java/1.6.0_06\r\nHost: www.xxx.com:20000\r\nAccept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\nConnection: keep-alive\r\nContent-Length: "+length+"\r\n\r\n" + body;
    out.println(s);

     BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
     while(true) {
          String ss = in.readLine();
          if (ss == null) break;
            System.out.println(ss);
     }

}
catch (Exception exp) {
}

It will work with payload :

  - payload: HttpContentType =  application/x-www-form-urlencoded
     [SORT]: 0,1,0,10,5,0,KL,0
     [FIELD]: 33,38,51,58,68,88,78,98,99,101,56,57,69,70,71,72,89,90,91,92,59,60,61,62,79,80,81,82
     [LIST]: 1155.KL,1295.KL,7191.KL,0097.KL,2267.KL

May I know how can I disable URL encoding on my POST payload?

Thanks and Regards
Yan Cheng Cheok


     


---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@...
For additional commands, e-mail: httpclient-users-help@...


Re: Using HttpClient to mimic a POST network request

by olegk :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Yan Cheng Cheok wrote:

> I realize the reason why it doesn't work is because,
>
> HttpClient perform URL encoding explicitly on my payload. If I try to
>
> try {
>     Socket socket = new Socket("www.xxx.com", 20000);
>     PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
>     final String body = "[SORT]=0,1,0,10,5,0,KL,0&[FIELD]=33,38,51,58,68,88,78,98,99,101,56,57,69,70,71,72,89,90,91,92,59,60,61,62,79,80,81,82&[LIST]=1155.KL,1295.KL,7191.KL,0097.KL,2267.KL";
>     final int length = body.length();
>     final String s = "POST /%5bvUpJYKw4QvGRMBmhATUxRwv4JrU9aDnwNEuangVyy6OuHxi2YiY=%5dImage? HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nCache-Control: no-cache\r\nPragma: no-cache\r\nUser-Agent: Mozilla/4.0 (Windows XP 5.1) Java/1.6.0_06\r\nHost: www.xxx.com:20000\r\nAccept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\nConnection: keep-alive\r\nContent-Length: "+length+"\r\n\r\n" + body;
>     out.println(s);
>
>      BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
>      while(true) {
>           String ss = in.readLine();
>           if (ss == null) break;
>             System.out.println(ss);
>      }
>
> }
> catch (Exception exp) {
> }
>
> It will work with payload :
>
>   - payload: HttpContentType =  application/x-www-form-urlencoded
>      [SORT]: 0,1,0,10,5,0,KL,0
>      [FIELD]: 33,38,51,58,68,88,78,98,99,101,56,57,69,70,71,72,89,90,91,92,59,60,61,62,79,80,81,82
>      [LIST]: 1155.KL,1295.KL,7191.KL,0097.KL,2267.KL
>
> May I know how can I disable URL encoding on my POST payload?
>

You should implement a custom RequestEntity class and encode the request
entity any way you please.

Oleg


> Thanks and Regards
> Yan Cheng Cheok
>
>
>      
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@...
> For additional commands, e-mail: httpclient-users-help@...
>


---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@...
For additional commands, e-mail: httpclient-users-help@...