如何在Julia中通过HTTP.request调用TexSmart HTTP API?
问题
我尝试调用腾讯TexSmart HTTP API,输入需为特定结构的字典。参考API文档中的Python示例编写了Julia的HTTP.request代码,但未获得有效响应,仅返回内容长度为0的Response。现寻求正确实现方式,也可接受使用PyCall或ccall的方案。
输入字典结构如下:
Dict("str" => "text you want to analyze", "options"=> Dict( "input_spec"=>Dict("lang"=>"auto"), "word_seg"=>Dict("enable"=>true), "pos_tagging"=>Dict("enable"=>true, "alg"=>"log_linear"), "ner"=>Dict("enable"=>true, "alg"=>"fine.std"), "syntactic_parsing"=>Dict("enable"=>false), "srl"=>Dict("enable"=>false)), "echo_data"=>Dict("request_id"=>12345) )
其中"options"和"echo_data"字段为可选,可忽略。
我尝试的Julia代码:
HTTP.request("POST", "https://texsmart.qq.com/api", [codeunits(json(Dict("str"=>"He stayed in San Francisco.")))])
API文档中的Python示例:
import json import requests obj = {"str": "he stayed in San Francisco."} req_str = json.dumps(obj).encode() url = "https://texsmart.qq.com/api" r = requests.post(url, data=req_str) r.encoding = "utf-8" print(r.text)
解决方案
一、正确的Julia HTTP请求实现
你之前的代码错误在于请求头与请求体的传递方式不符合HTTP.request的参数规则,且未指定必要的Content-Type头。以下是修正后的代码:
using HTTP, JSON3 # 构造请求数据,可按需添加options/echo_data字段 data = Dict( "str" => "He stayed in San Francisco." ) # 转换为JSON格式字符串 json_payload = JSON3.write(data) # 发送POST请求,必须指定Content-Type头 response = HTTP.request( "POST", "https://texsmart.qq.com/api", ["Content-Type" => "application/json"], json_payload ) # 解析并打印响应结果 result = JSON3.read(response.body) println(result)
二、使用PyCall调用Python的requests库
如果更熟悉Python的实现逻辑,可以通过PyCall直接复用requests库完成请求:
using PyCall # 导入Python依赖库 requests = pyimport("requests") json = pyimport("json") # 构造请求数据 obj = Dict("str" => "He stayed in San Francisco.") req_str = json.dumps(obj).encode() # 发送请求并处理响应 r = requests.post("https://texsmart.qq.com/api", data=req_str) r.encoding = "utf-8" println(r.text)
三、关键注意事项
- 必须添加
Content-Type: application/json请求头,否则API无法正确解析JSON格式的请求体。 - 若使用完整的
options参数,直接将对应字典结构加入请求数据即可,API会自动应用对应的分析配置。 - 确保Julia环境已安装依赖包:
Pkg.add(["HTTP", "JSON3"])(或使用JSON包替代JSON3)。
内容的提问来源于stack exchange,提问作者Ethan Leonard
相关产品推荐
相关产品推荐

