curl调用OpenOCR API正常,Python requests调用失败,如何用data参数提交字典?
解决Python调用OpenOCR API的问题
你的问题出在两个关键细节上:URL路径不对,以及请求体结构不符合API要求,咱们一步步来修正。
首先看你给出的curl命令,请求的是http://35.154.148.131:9292/ocr这个接口路径,但你的Python代码里只写了http://35.154.148.131:9292,少了核心的/ocr后缀,这会导致请求打到API的默认首页,也就是你看到的那个提示页面。
其次,curl命令里是直接把{"img_url":"...","engine":"tesseract"}作为JSON请求体发送的,但你的Python代码把这个字典包在了json_payload里,相当于给请求体多套了一层不必要的结构,API根本识别不了这个格式。
下面是两种正确的写法:
方法一:用requests的json参数(最简洁)
这种方式下,requests会自动帮你设置Content-Type: application/json请求头,并且把字典转成标准的JSON字符串:
import requests url = 'http://35.154.148.131:9292/ocr' data = {"img_url":"http://tleyden-misc.s3.amazonaws.com/blog_images/ocr_test.png","engine":"tesseract"} r = requests.post(url, json=data) # 打印响应结果验证 print(r.text)
方法二:手动处理JSON和请求头
如果想自己控制请求体编码和头信息,可以这样写:
import requests import json url = 'http://35.154.148.131:9292/ocr' data = {"img_url":"http://tleyden-misc.s3.amazonaws.com/blog_images/ocr_test.png","engine":"tesseract"} # 将字典转换为JSON字符串 json_data = json.dumps(data) # 设置正确的Content-Type请求头 headers = {"Content-Type": "application/json"} r = requests.post(url, data=json_data, headers=headers) print(r.text)
这两种写法都和你原来的curl命令逻辑完全一致,应该能正常调用OpenOCR API了。
内容的提问来源于stack exchange,提问作者shantanuo
相关产品推荐
相关产品推荐

