使用Retrofit(Okhttp)时如何从android studio中的log cat复制请求正文,标头(不带标签)?

Posted

技术标签:

【中文标题】使用Retrofit(Okhttp)时如何从android studio中的log cat复制请求正文,标头(不带标签)?【英文标题】:How copy request body, headers (without tags) from log cat in android studio when using Retrofit(Okhttp)? 【发布时间】:2019-06-17 21:58:50 【问题描述】:

我无法从 log cat 中仅复制请求正文(没有标签)。我认为这是一个非常有用的功能,因为您经常需要通过邮递员检查请求,并且很难发出另一个类似的请求(特别是如果请求是数字签名的)。这是我想在没有 D: 前缀的情况下复制的日志示例:

D: --> POST http://url
D: Content-Type: application/xml; charset=utf-8
D: Content-Length: 3586
D: <?xml version="1.0" encoding="UTF-8"?><APRequest>
D: <jsonString>"searchDate":"24.01.2019","userOrgCode":"19710003","userId":"5000000000014720"</jsonString>
D: <dateOfSend>1548316774835</dateOfSend>
D: <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
D: <ds:SignedInfo>
D: <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
D: <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
D: <ds:Reference URI="">
D: <ds:Transforms>
D: <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
D: <ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
D: </ds:Transforms>
D: <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
D: <ds:DigestValue>KK5lQsy9CqracgR1YS2nZBkY2gU4ntOCtAgbPQeI7AU=</ds:DigestValue>
D: </ds:Reference>
D: </ds:SignedInfo>
D: <ds:SignatureValue>
D: T1CWxz0kgoKKFFwCBaA+oOfMunnzjF4fZEWoB5ll+Sdm6ql/mcHtJUEcVVF2MgwzYVP9O0TI5iiD
D: VGg9in36dC6WcCqb9UmNJM/I8KM1CDszwAWHLSto7dgSlE1DgXlImI2DhexcrXQyMyXVboQOPrHO
D: qbtT1Ou8hL+M8j/jxe5HMyANH55/3x83/8aae5GBxAVsaCyfJR5wWe4FXdDBRHU65RFe/JxRrDo3
D: 3sqed8P0AMtDPJwqKv3gm7y4i5sPpoRpaMTPBhKKqkZyFLT7TCVEoTbFJ1z9d7SWakTRsGNsQhr6
D: sGJ9gniyjq/J9Qw/LdC4muCQ9I6t/OJhZSW+Fg==
D: </ds:SignatureValue>
D: <ds:KeyInfo>
D: <ds:X509Data>
D: <ds:X509Certificate>
D: MIIGZTCCBE2gAwIBAgIUIH2IhoiQPOeoZt1XwaQWoelFpIAwDQYJKoZIhvcNAQELBQAwUjELMAkG
D: A1UEBhMCS1oxQzBBBgNVBAMMOtKw0JvQotCi0KvSmiDQmtCj05jQm9CQ0J3QlNCr0KDQo9Co0Ksg
D: 0J7QoNCi0JDQm9Cr0pogKFJTQSkwHhcNMTgxMTEyMDU0MjUwWhcNMTkxMTEyMDU0MjUwWjCBpzEc
D: MBoGA1UEAwwT0JDQodKa0JDQoCDTmNCh0JXQojETMBEGA1UEBAwK0JDQodKa0JDQoDEYMBYGA1UE
D: BRMPSUlOOTUwMzMxMzAwMzI0MQswCQYDVQQGEwJLWjEVMBMGA1UEBwwM0JDQodCi0JDQndCQMRUw
D: EwYDVQQIDAzQkNCh0KLQkNCd0JAxHTAbBgNVBCoMFNKa0JDQm9CY0JHQldCa0rDQm9CrMIIBIjAN
D: BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQkJDPEj5sbIme7Qw9rpOTTVU6CG1ZVQgR/Ll9d1
D: gVtd++ZYN2uirrBhFFAGR9Hw3e3U6WbakvGw2KDp0lPprTg2Pv50lC9ghFsLik1JQ3cvpM5iRQw6
D: O8S3+2CSto3VVigCa7/Ck2rtHauOCNOUAMY9KfiAyDAfv9lLC2MzrfVEk0po2p8mrQh+le9RwQKI
D: gLJp+G/yJEgIKootISf1HZ0uyGOWy2iqLygaaRd4C8zqB6kMNb2Pvo76DHfopE/GkU0rqFQe/HMh
D: aJx5whlsgY2UQU8dHO28LKcz6HRyl+4WvObwWpmhGAXJDFfTMHsIgsSQekzfVkQbYk9INuXbxQID
D: AQABo4IB2zCCAdcwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggqgw4DAwQB
D: ATAPBgNVHSMECDAGgARbanQRMB0GA1UdDgQWBBSg7xyKYXvCr6OCr5zQ/5c0JN4I0zBeBgNVHSAE
D: VzBVMFMGByqDDgMDAgQwSDAhBggrBgEFBQcCARYVaHR0cDovL3BraS5nb3Yua3ovY3BzMCMGCCsG
D: AQUFBwICMBcMFWh0dHA6Ly9wa2kuZ292Lmt6L2NwczBWBgNVHR8ETzBNMEugSaBHhiFodHRwOi8v
D: Y3JsLnBraS5nb3Yua3ovbmNhX3JzYS5jcmyGImh0dHA6Ly9jcmwxLnBraS5nb3Yua3ovbmNhX3Jz
D: YS5jcmwwWgYDVR0uBFMwUTBPoE2gS4YjaHR0cDovL2NybC5wa2kuZ292Lmt6L25jYV9kX3JzYS5j
D: cmyGJGh0dHA6Ly9jcmwxLnBraS5nb3Yua3ovbmNhX2RfcnNhLmNybDBiBggrBgEFBQcBAQRWMFQw
D: LgYIKwYBBQUHMAKGImh0dHA6Ly9ASDFAWEQvbmNhX3JzYS5jZXIwIgYIKwYBBQUH
D: MAGGFmh0dHA6Ly9vY3NwLnBraS5nb3Yua3owDQYJKoZIhvcNAQELBQADggIBAIxnLTs4soGhmZ6s
D: AM3JB1Xu3n6+RfuXQ1nFit2wAjFU0Ptflual5nulwcAMFXnj/9A+irXEOcBWaL8vMCd4OuI49wwr
D: +QVGErNp5t3zf8m9Z7ZKkzTtrKSE9JG4hz+URnS+N2DPl/Z+uD+2SdsILuseEKHwPitio9FtYDIL
D: RGRUX9LgQfYBl7c9Kjw3+zRgvGhB4NB+KwP7I1g8QB0OBj5B6GyhKN6QaezNAdwu/kO/xsExUyPP
D: DUlJ3WZG601ngrXABmyPSSgQOagC9EGDayfBlh9cZ/tEKdCwooR2IEVskuhm4JGGeOPKoUebp9pM
D: GUXhiVFdOx7SBAvwyI4AlK8bzVvKHGFczQiwikYZ0AKqD+oK4v/7ILOFZdbTcDZz5OA/MuqKo06S
D: 7nbl89fn4qyhWSvQLwkeWQu5z2elqzgnT19wE8rUC7Q+lsX/xikKkBGweAZT4wYShB5x8opCnRfL
D: sLlo1Rs0VRN16U9EmcgWy4mP5o+QuHWAJyUiYy69WumTjQyvz5ss/vJoLsqzPl0s8uW5bQkg2OXC
D: O/MFXxnc1k7n81RzRbNx+AIn8B8f8W6qfOZ3ighgSw8hweIvtMjtN9xKYY+DRH781QeSVFfb3uUg
D: VEByOAuXc1U+F/v6TFh5DEZZaVRQrIT6OFAf2RHRVlJognrtVyK+7Dr3C0Hi
D: </ds:X509Certificate>
D: </ds:X509Data>
D: </ds:KeyInfo>
D: </ds:Signature></APRequest>
D: --> END POST (3586-byte body)
D: <-- 200 OK http://url (259ms)

现在是否可以复制不带 D:、I: 等标签的日志?或者使用okhttp3改造时是否可以单行打印日志?

【问题讨论】:

使用stetho可以从chrome浏览器复制 谢谢,很有用! 我只是在调试模式下运行然后使用:从断点复制值 @LinhNguyen 不错的方法,之前没有想到,但是需要附加调试器,所以我决定使用stetho,谢谢 【参考方案1】:

有很多 3rd 方库用于分析(拦截)网络请求

如果使用 okhttp 作为基础

    stetho chuck okhttp-logging-interceptor LoggingInterceptor

在你的情况下,你可以使用这个LoggingInterceptor

【讨论】:

刚才我尝试了 Logging 拦截器,但无法从 log cat 复制请求,但是当使用 stetho 时,我可以从 chrome 中看到并复制它。谢谢

以上是关于使用Retrofit(Okhttp)时如何从android studio中的log cat复制请求正文,标头(不带标签)?的主要内容,如果未能解决你的问题,请参考以下文章

使用OkHttp拦截器和Retrofit进行缓存

当我们有 OkHttp 时为啥要使用 Retrofit

如何使用 OkHttp/Retrofit 重试 HTTP 请求?

如何使用 Retrofit 和 OKHttp 在下一次请求时使缓存路由无效/强制更新?

Retrofit--使用Retrofit时怎样去设置OKHttp

如何使用 Retrofit 2 + OkHttp 3 加密/隐藏 HTTPS 调用的主体?