requests请求谷歌翻译遇到400该怎么解决?

前请提要

逛52论坛的时候,看到有人问为啥谷歌翻译会返回400
52论坛自己试了一下发现是因为传值格式才会返回400,下面简单讲一下自己的流程

简单测试

首先先去谷歌翻译的网站,看一下请求的流程
requests请求谷歌翻译遇到400该怎么解决?
发现上面这个请求就是发送要翻译的内容,然后再获取返回值的请求
requests请求谷歌翻译遇到400该怎么解决?
然后再看一下参数

之后简单写一个请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}

data = {
"f.req":'[[["MkEWBc","[[\"玩\",\"zh-CN\",\"en\",true],[null]]",null,"generic"]]]'
}

p = requests.post(url="https://translate.google.cn/_/TranslateWebserverUi/data/batchexecute",headers=headers,data=data)

print(p.status_code)
print(p.text)

发现返回值是400,很迷

解决

我当时其实以为的是会有什么检测,但是仔细一想,不应该啊。
然后发现用f.req: %5B%5B%5B%22MkEWBc%22%2C%22%5B%5B%5C%22%E7%8E%A9%5C%22%2C%5C%22zh-CN%5C%22%2C%5C%22en%5C%22%2Ctrue%5D%2C%5Bnull%5D%5D%22%2Cnull%2C%22generic%22%5D%5D%5D
这个值做请求的话,会正常返回200,那么原因其实就是出在参数上了,但是具体是什么原因呢?
还是不是很清楚,于是换了个浏览器。
首先试的试edge发现跟谷歌没啥区别,然后就试了一下火狐,发现问题所在了
requests请求谷歌翻译遇到400该怎么解决?
参数上的英译汉,然后翻译内容等等,前面的不是随便加的,是参数的一部分,所以应该加\\\"其实就是\“这个,而如果只用\"的话结果则是”,所以就导致传的内容出现了问题,然后就会返回400了,更改一下参数就会返回正常的值了。

1
2
3
4
5
6
200
)]}'

[["wrb.fr","MkEWBc","[[\"Wán\",null,null,[[[0,[[[null,1]],[true]]]],1]],[[[null,null,null,null,null,[[\"Play\",null,null,null,[[\"Play\",[4,5]]]]]]],\"en\",1,\"zh-CN\",[\"玩\",\"zh-CN\",\"en\",true]],\"zh-CN\",[\"玩\",null,null,null,null,[[[\"名词\",[[\"play\",null,[\"玩\",\"游戏\",\"戏\",\"戏剧\",\"比赛\",\"剧\"],1,true]],\"en\",\"zh-CN\"],[\"动词\",[[\"play\",null,[\"玩\",\"玩耍\",\"游玩\",\"演\",\"玩儿\",\"玩弄\"],1,true],[\"enjoy\",null,[\"享受\",\"享有\",\"欣赏\",\"享\",\"拥有\",\"玩\"],3,true],[\"toy\",null,[\"玩\",\"玩弄\"],3,true],[\"have fun\",null,[\"玩\",\"玩耍\"],3,true],[\"amuse\",null,[\"游玩\",\"玩耍\",\"娱\",\"玩\",\"敖\",\"惊愕\"],3,true],[\"joke\",null,[\"开玩笑\",\"玩\",\"戏\",\"敖\"],3,true],[\"treat lightly\",null,[\"玩\",\"等闲观之\"],3,true]],\"en\",\"zh-CN\"]],8],null,null,\"zh-CN\",1]]",null,null,null,"generic"],["di",25],["af.httprm",24,"8012391421297243024"]]

Process finished with exit code 0

requests请求谷歌翻译遇到400该怎么解决?

http://www.datehoer.com/posts/69c45d9c-6e80-11ee-a697-01b0896cf41d/

作者

datehoer

发布于

2021-11-21

更新于

2023-10-19

许可协议

评论