【问题标题】:Raw http response in golanggolang中的原始http响应
【发布时间】:2018-03-29 22:11:06
【问题描述】:

我有一个向端点发出的请求,但由于某种原因,响应正文仅包含响应的最后一行(整个响应在 fiddler 中捕获)。如果我使用 requests 模块在 python 中重新创建请求,也会发生同样的事情。但是,我注意到如果我在 python 中获取整个原始响应,我可以看到所有行(由多个 \r 分隔)。我想知道是否可以像使用 python 中的 response.raw.data 方法一样查看整个原始响应。换句话说,有没有一种方法可以查看整个文本响应,而不是切断除最后一行之外的所有内容?如果有人知道为什么最后一行被切断,也将不胜感激。

为了澄清,这只发生在这个单一端点上,我怀疑响应正文中的\rs 可能是罪魁祸首,但我不确定。我没有从任何其他 http 响应中看到这种行为。

编辑:这是我用来查看响应的代码

bodyB, _ := ioutil.ReadAll(resp.Body)
bodyStr := string(bodyB)

【问题讨论】:

  • 完成。使用response.text 访问 python 中的文本响应时也会出现此问题
  • 在 Go 中尝试这个函数golang.org/pkg/net/http/httputil/#DumpResponse,并确保在此之前没有其他内容读取正文,如果确实需要您自己重置正文。您可以查看 DumpResponse 的源代码,了解如何在读取正文后重置正文 (golang.org/src/net/http/httputil/dump.go?s=8166:8231#L271),从而有效地允许对正文进行另一次后续读取。
  • 我回家后会试试这个,谢谢。知道什么可能会在多个语言中抛出文本响应吗? @mkopriva
  • @JordanAllen 回复格式错误
  • \r 是回车符。它指示您的终端将光标(或在打字机上调用的托架)移动到行首并覆盖之前写入的文本。

标签: python http go networking python-requests


【解决方案1】:

\r 是回车符,但不是换行符,所以当你打印它时,你会得到所有的行,但它们每次都会被覆盖。

你可能会想要这样做:

bodyB, _ := ioutil.ReadAll(resp.Body)
bodyStr := string(bytes.Replace(bodyB, []byte("\r"), []byte("\r\n"), -1))

【讨论】:

    猜你喜欢
    • 2020-10-04
    • 2022-01-18
    • 2011-02-13
    • 2016-01-21
    • 2012-02-13
    • 1970-01-01
    • 2013-11-07
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多