Python requests转R httr实现pKa预测API调用失败求助
问题解决:R httr调用pKa API返回500错误的修复方案
错误根源
你遇到的500错误和AttributeError: 'NoneType' object has no attribute 'filename',本质是请求格式不匹配:
- Python的
requests.post(files={'Smiles': ('tmg', 分子Smiles串)})是发送multipart/form-data格式的请求,把Smiles字段模拟成一个名为tmg的文本文件上传。 - 你用R转成JSON格式发送后,服务器后端代码找不到预期的文件字段的
filename属性,导致解析失败。
正确的R httr实现代码
直接模拟Python的multipart/form-data请求即可,不需要用JSON:
library(httr) # 替换成实际的API地址 api_url <- "https://your-pka-api-url.com" # 替换成你的分子Smiles串 target_smiles <- "CCO" # 构造模拟文件上传的表单字段 request_body <- list( Smiles = upload_file( content = target_smiles, type = "text/plain", name = "tmg" # 必须和Python里的文件名保持一致 ) ) # 发送POST请求 response <- POST(api_url, body = request_body, encode = "multipart") # 查看响应结果 print(content(response, "text"))
补充说明
如果upload_file因为临时文件权限问题报错,可以改用curl::form_file直接传递字符串:
library(httr) library(curl) api_url <- "https://your-pka-api-url.com" target_smiles <- "CCO" request_body <- list( Smiles = form_file( path = I(target_smiles), # I()标记为原始字符串,不转义 type = "text/plain", name = "tmg" ) ) response <- POST(api_url, body = request_body, encode = "multipart")
内容的提问来源于stack exchange,提问作者Greacus
相关产品推荐
相关产品推荐

