gpt4 book ai didi

python - 如何从包含 header 和正文的响应中提取 JSON 数据?

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:46 25 4
gpt4 key购买 nike

这是我向 Stack Overflow 提出的第一个问题,因为通常我可以在这里找到我的问题的解决方案,但对于这种特殊情况,我不能。我正在为我的编译器编写一个 Python 插件,它以各种语言输出 REST 调用以与 API 交互。我通过在请求正文中以 JSON 形式发送用户名和密码来使用 socket 和 ssl 模块进行身份验证。身份验证成功后,API 将以以下格式返回响应,响应主体中包含重要的响应数据:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Date: Tue, 05 Feb 2013 03:36:18 GMT
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST,OPTIONS,GET
Access-Control-Allow-Headers: Content-Type
Server: Restlet-Framework/2.0m5
Content-Type: text/plain;charset=ISO-8859-1
Content-Length: 94

{"authentication-token":"<token>","authentication-secret":"<secret>"}

对于 Python 爱好者来说,这可能是一个非常初级的问题,因为它具有强大的字符串操作工具。但是唉,我是一个Java入门的新程序员。我想知道解析整个响应以获得 "<token>" 的最佳方法是什么?和 "<secret>" ?我应该使用搜索“{”并将子字符串转储到 json 对象中吗?我的直觉告诉我尝试使用 re 模块,但我似乎无法弄清楚在这种情况下如何使用它,因为 token 和 secret 的模式显然是不可预测的。因为我选择了使用低级模块集进行身份验证,所以这个响应是一个大字符串,通过构造 header 并在主体中向其附加JSON数据而获得,然后执行请求并使用以下代码获取响应:

#Socket configuration and connection execution
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn = ssl.wrap_socket(sock, ca_certs = pem_file)
conn.connect((host, port))
conn.send(req)

response = conn.recv()
print(response)

打印语句输出第一个代码示例。任何帮助或见解将非常感激不尽!

最佳答案

HTTP header 通过 \r\n\r\n 序列与正文的​​其余部分分开。做这样的事情:

import json

...

(headers, js) = response.split("\r\n\r\n")
data = json.loads(js)
token = data["authentication-token"]
secret = data["authentication-secret"]

您可能想要检查响应等,各种库(例如 requests)可以为您轻松完成所有这些工作。

关于python - 如何从包含 header 和正文的响应中提取 JSON 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14699932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com