我在Apache上收到了一个带有mod_wsgi的POSTed JSON。我必须将JSON转发到某个API(使用POST),接受API的响应并回复初始POST的来源。
这里是python代码
import requests
import urllib.parse
def application(environ, start_response):
url = "http://texchange.nowtaxi.ru/api/secret_api_key/"
query = environ['QUERY_STRING']
if query == "get":
url += "tariff/list"
r = requests.get(url)
response_headers = [('Content-type', 'application/json')]
else:
url += "order/put"
input_len = int(environ.get('CONTENT_LENGTH', '0'))
data = environ['wsgi.input'].read(input_len)
decoded = data.decode('utf-8')
unquoted = urllib.parse.unquote(decoded)
print(decoded) # 'from%5Baddress%5D=%D0%'
print(unquoted) # 'from[address]=\xd0\xa0'
r = requests.post(url,data)
output_len = sum(len(line) for line in r.text)
response_headers = [('Content-type', 'application/json'),
('Content-Length', str(output_len))]
status = "200 OK"
start_response(status, response_headers)
return [r.text.encode('utf-8')]
实际的JSON开始"{"from":{"address":"Россия
我认为那些\x
被称为转义符号,因此我尝试了ast.literal_eval
和codecs.getdecoder("unicode_escape")
,但它没有帮助。我不能正确地说这个案子,因为我觉得我误解了wtf正在这里发生。也许我必须以某种方式更改发送POST到wsgi脚本的.js文件中的$.post()
调用?
UPD:我的兄弟说完全不清楚我需要什么。我会澄清一下。我需要在它的初始形式中获取代表收到的JSON的字符串。使用西里尔字母,"
s,{}
s等。解码收到的字节序列后我得到的是'from%5Baddress%5D=%D0%'
。如果我取消引用它,它会转换为'from[address]=\xd0\xa0'
,但这仍然不是我想要的