递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 2978|回复: 7
打印 上一主题 下一主题

[视窗] [百度翻疑]curl访问百度翻译时,译文不能超过两个单词。

[复制链接]

69

主题

989

帖子

4466

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
4466
跳转到指定楼层
楼主
发表于 2023-9-18 19:37:13 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 hcwanz 于 2023-9-18 19:38 编辑

这里以一个错误的链接为例。

当译文为一个单词的时候,会返回错误提示:


当译文为两个单词的时候,用浏览器访问生成的网址可以正常返回,用curl访问就不会返回:


下面是代码:
<火山程序 类型 = "通常" 版本 = 1 />

方法 访问 <公开 静态 类型 = 字节集类>
参数 用户号 <类型 = 文本型 @默认值 = "2015063000000001">
参数 密钥 <类型 = 文本型 @默认值 = "12345678">
参数 译文 <类型 = 文本型 @默认值 = "apple">
参数 原语言 <类型 = 文本型 @默认值 = "en">
参数 目标语言 <类型 = 文本型 @默认值 = "zh">
{
    变量 随机数 <类型 = 文本型 编辑时信息 = "0, 742C1, 0, 0">
    变量 网址 <类型 = 文本型
            值 = "http://api.fanyi.baidu.com/api/trans/vip/translate?q=%s&from=%s&to=%s&appid=%s&salt=%s&sign="
            编辑时信息 = "0, 742C1, 0, 0">
    随机数 = 到文本 (取随机数 ())
    网址 = 取格式文本 (网址, 译文, 原语言, 目标语言, 用户号, 随机数)
    加入小写文本 (网址, 加解密类.取数据MD5 (文本到UTF8 (用户号 + 译文 + 随机数 + 密钥, 假)))
    调试输出 (网址)
    返回 (((网络访问类)新建对象 (网络访问类)).网页访问 (网址, , , , , , , , , , , ).请求结果)
}



回复

使用道具 举报

26

主题

1900

帖子

6926

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6926
8#
发表于 2023-9-19 12:53:14 | 只看该作者
hcwanz 发表于 2023-9-19 10:32
问题好像是要把译文里的空格转成别的东西,不然就算参数错误,你的这个实例和浏览器自动转了,我这个跟个 ...

要做URL编码,我那个 表单构造类 会自动进行URL编码的

评分

参与人数 1金钱 +1 收起 理由
hcwanz + 1 原来如此

查看全部评分

回复

使用道具 举报

69

主题

989

帖子

4466

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
4466
7#
 楼主| 发表于 2023-9-19 10:32:12 | 只看该作者
Xelloss0618 发表于 2023-9-18 21:11
测试了一下,没问题了,注意要用自己的AppID和密钥,你图里那个 2015063000000001 根本就不能用。
下面是我 ...

问题好像是要把译文里的空格转成别的东西,不然就算参数错误,你的这个实例和浏览器自动转了,我这个跟个憨瓜一样直接填的空格
回复

使用道具 举报

69

主题

989

帖子

4466

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
4466
6#
 楼主| 发表于 2023-9-19 10:05:25 | 只看该作者
Xelloss0618 发表于 2023-9-18 21:11
测试了一下,没问题了,注意要用自己的AppID和密钥,你图里那个 2015063000000001 根本就不能用。
下面是我 ...

对错是百度那里的问题,即使是错的,响应码也是200。但问题是我用两个以上的单词,响应码就变400了。
HTTP/1.1 400 Bad Request
而且生成的网址在浏览器里用能正常的返回。
回复

使用道具 举报

26

主题

1900

帖子

6926

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6926
5#
发表于 2023-9-18 21:11:30 | 只看该作者
本帖最后由 Xelloss0618 于 2023-9-18 21:13 编辑

测试了一下,没问题了,注意要用自己的AppID和密钥,你图里那个 2015063000000001 根本就不能用。
下面是我的例子,依赖 PIV模块(换成 curl 也可以,不用特意添加协议头)


<火山程序 类型 = "通常" 版本 = 1 />

方法 百度翻译 <公开 静态 类型 = 文本型>
参数 原文 <类型 = 文本型>
参数 源语言 <类型 = 文本型 @默认值 = "en">
参数 目标语言 <类型 = 文本型 @默认值 = "zh">
参数 AppID <类型 = 文本型>
参数 密钥 <类型 = 文本型>
{
    变量 随机数 <类型 = 标准随机数类>
    变量 salt <类型 = 文本型>
    变量 sign <类型 = 文本型>
    变量 表单 <类型 = 表单构造类U>
    变量 网络访问 <类型 = 网络同步访问类>
    变量 请求响应 <类型 = 网络请求响应类>
    salt = 随机数.取随机字符 (10, 1)
    sign = MD5校验类.取数据MD5 (文本到UTF8 (AppID + 原文 + salt + 密钥, 假), 假)
    表单.添加参数 ("q", 原文).添加参数 ("from", 源语言).添加参数 ("to", 目标语言).添加参数 ("appid", AppID).添加参数 ("salt", salt).添加参数 ("sign", sign)
    请求响应 = 网络访问.网页访问2 ("https://fanyi-api.baidu.com/api/trans/vip/translate", 请求方式_WinHTTP.POST, 表单.数据 ())
    如果 (请求响应.响应码 == 200)
    {
        变量 json <类型 = PivJSON>
        如果 (json.解析UTF8 (请求响应.请求结果) == 真)
        {
            返回 (json.取路径文本 ("/trans_result/0/dst"))
        }
    }
    返回 ("")
}
回复

使用道具 举报

444

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
40529
地板
发表于 2023-9-18 20:53:03 | 只看该作者
填写协议头。把协议头都加上。
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

69

主题

989

帖子

4466

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
4466
板凳
 楼主| 发表于 2023-9-18 19:55:43 | 只看该作者

我翻译一个单词的可以,多于一个就不返回了,连报错都不返回
回复

使用道具 举报

28

主题

359

帖子

3325

积分

论坛元老

Rank: 8Rank: 8

积分
3325
沙发
发表于 2023-9-18 19:48:12 | 只看该作者


这可以的

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-24 05:25 , Processed in 0.104621 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表