【问题标题】:Get full HTTP request获取完整的 HTTP 请求
【发布时间】:2014-11-15 19:09:49
【问题描述】:

对于调试问题,我希望 Unirest-Java 在出现一组选项时执行请求。我怎样才能得到这个:

POST / HTTP/1.1
Host: www.some.host.tld
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
field1=FIELD1&field2=FIELD2

从这里:

HttpRequest request = Unirest.post(SOMEHOST_URL)
            .field("field1" , FIELD1)
            .field("field2", FIELD2)
            .getHttpRequest();

也就是说,如何从HttpRequest 获取完整的 HTTP 请求?我真的不知道要使用的代理,因为我可以让 SSL 支持工作的唯一一个是 Charles,并且由于某种原因它不会拾取 java 流量。其他工具会阻塞 SSL,主要是因为我需要与之通信的服务器存在缺陷,使用自签名证书和无效主机名。所以我很乐意尝试代理,但它必须在这些条件下工作。最好从Unirest/HTTPClient 本身中提取此信息。我已经尝试使用.setInterceptorFirst( 构建HttpClient,但我无法从拦截器中获取请求正文,只有 一些 的标头。

【问题讨论】:

  • @ErnestoCampohermoso:这有什么关系?
  • @ErnestoCampohermoso 我不想要一个成熟的代理,只是一种从这段代码中获取结果请求的方法。
  • 好的,我建议了一个轻量级工具,它也可以像代理一样工作,但很轻量级。

标签: java rest http unirest


【解决方案1】:

我从未使用过 Unirest,但它使用 Apache HTTP 客户端 4,因此在 org.apache.http 上设置调试级别记录器应该会为您提供所有传输的数据,包括标题和内容。

请根据您使用的日志系统查看如何操作

编辑:https://hc.apache.org/httpcomponents-client-4.5.x/logging.html

【讨论】:

    【解决方案2】:

    不幸的是,Unirest 没有很好的机制来获取发送的请求。但是您可以通过这样做来重构请求:

    // build a request
    HttpRequestWithBody request = Unirest.post(url);
    request.headers = myHeaders;
    request.body = myBody;
    
    // send the request
    HttpResponse<String> response = request.asString(); 
    
    // print the request 
    System.out.println(request.getHttpMethod() + " " + request.getUrl() + " HTTP/1.1");
    
    Map<String, List<String>> requestHeaders = request.getHeaders();
    
    for(String key : requestHeaders.keySet()) {
        List<String> values = requestHeaders.get(key);
        for(String value : values) {
            System.out.println(key + " : " + value);
        }
    }
    
    InputStream in = loginRequest.getBody().getEntity().getContent();
    String body = IOUtils.toString(in, "UTF-8");
    in.close();
    
    System.out.println(body);
    

    【讨论】:

      【解决方案3】:

      您可以使用 TCPMon:https://code.google.com/p/tcpmon/

      来自网站:

      客户端将连接到运行 tcpmon 的主机上的本地端口。服务器的地址应在服务器名称和服务器端口中指定。为每个连接捕获的信息显示在由连接的本地端口标识的选项卡式面板中。

      这个工具我以前用过,轻巧好用。如果您需要教程,请检查以下内容:

      http://www.asjava.com/web-services/tcpmon-tutorial-web-service-debugging-tool/

      更新。

      TCPMon 无法监控 https 流量。或者,您可以使用 SSLDump。

      ssldump主站:http://www.rtfm.com/ssldump/Ssldump.html 使用示例:http://blog.facilelogin.com/2010/11/ssl-debugging-part-ii-intercepting.html

      【讨论】:

      • TCPMon 在我凌乱的 SSL 设置中不起作用。我到处都是证书错误。
      • SSLDump 似乎只提供 SSL 连接状态,而我需要它背后的 HTTP 数据。
      猜你喜欢
      • 1970-01-01
      • 2017-09-08
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      • 2018-08-08
      • 2017-07-09
      相关资源
      最近更新 更多