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

11/21/2021 python

# 前请提要

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

# 简单测试

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

之后简单写一个请求

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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14

发现返回值是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了,更改一下参数就会返回正常的值了。

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
1
2
3
4
5
6