这是我向 Stack Overflow 提出的第一个问题,因为通常我可以在这里找到我的问题的解决方案,但对于这种特殊情况,我不能。我正在为我的编译器编写一个 Python 插件,它以各种语言输出 REST 调用以与 API 交互。我通过在请求正文中以 JSON 形式发送用户名和密码来使用套接字和 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>"}
鉴于 Pythonistas 强大的字符串操作工具,这可能是一个非常基本的问题。但是,唉,我是一个从 Java 开始的新程序员。我想知道解析整个响应以获得"<token>"
and的最佳方法是"<secret>"
什么?我应该使用搜索“{”并将子字符串转储到 json 对象中吗?我的直觉告诉我尝试使用 re 模块,但我似乎无法弄清楚在这种情况下如何使用它,因为令牌和秘密的模式显然是不可预测的。因为我选择了使用低级模块集进行身份验证,所以这个响应是一个大字符串,通过构造标头并将 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)
print 语句输出第一个代码示例。任何帮助或见解将不胜感激!