作者:非妃是公主
专栏:《Golang》
博客地址:https://blog.csdn.net/myf_666
个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩
文章目录
- 一、cUrl是什么?
- 二、cUrl如何获取?
- 1. cUrl在哪?
- 2. 如何获取?详细步骤
- 三、将cURL转化为不同语言的request代码
- 五、运行结果
一、cUrl是什么?
cURL(客户端URL)是一个开放源代码的命令行工具,也是一个跨平台的库(libcurl),用于在服务器之间传输数据,并分发给几乎所有新的操作系统。cURL编程用于需要通过Internet协议发送或接收数据的几乎任何地方。
简单地说,通过cUrl命令,就可以实现对其它服务器中资源的请求,我们请求到response后,在对response进行解析,以获得我们需要的数据。
二、cUrl如何获取?
1. cUrl在哪?
web浏览器中,我们每发送1个请求,比如点击一个按钮,对应都有着响应的cUrl指令在运行,然后浏览器把数据解析后返回给我们。以彩云翻译为例:https://fanyi.caiyunapp.com/#/
翻译文字:
其实,这是1个请求,参数为用户的输入,返回数据为输入参数对应的翻译。
2. 如何获取?详细步骤
-
第 1 步:f12打开开发者工具,并点击网络,如下图:
-
第 2 步:ctrl+R刷新记录,如下:
-
第 3 步:继续点击翻译按钮,模拟请求发送,可以看到名称中出现了dict、translator等请求,点进去看一下表头。
-
第 4 步:查看表头、负载、预览等可以发现如下信息:
-
通过这些信息,我们就可以确定,这就是我们想要用的请求request,进而排除translator!
-
第 5 步:复制请求为cURL(bash)。注意:这里要选择bash,而不是cmd。至于原因,具体说来就是bash命令不仅可以运行windows系统上而且可以运行在Linux系统上,但是cmd命令只能运行在Linux上,而一般网站服务器的操作系统都是Linux系统,因此要选择bash版本的命令,详细内容可以查看这篇文章:https://www.zhihu.com/question/43134881/answer/1834076537
-
经过以上 5 个步骤:我们就获得了cURL(bash)。
三、将cURL转化为不同语言的request代码
这里可以采用一个网站进行转换:https://curlconverter.com/go/
网站中可以选择不同的语言类型,如下:
此处,以Go语言为例,转换结果如下:
转化得到的代码:
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{"trans_type":"en2zh","source":"good"}`)
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("authority", "api.interpreter.caiyunai.com")
req.Header.Set("accept", "application/json, text/plain, */*")
req.Header.Set("accept-language", "zh-CN,zh;q=0.9")
req.Header.Set("app-name", "xy")
req.Header.Set("content-type", "application/json;charset=UTF-8")
req.Header.Set("device-id", "")
req.Header.Set("origin", "https://fanyi.caiyunapp.com")
req.Header.Set("os-type", "web")
req.Header.Set("os-version", "")
req.Header.Set("referer", "https://fanyi.caiyunapp.com/")
req.Header.Set("sec-ch-ua", `"Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"`)
req.Header.Set("sec-ch-ua-mobile", "?0")
req.Header.Set("sec-ch-ua-platform", `"Windows"`)
req.Header.Set("sec-fetch-dest", "empty")
req.Header.Set("sec-fetch-mode", "cors")
req.Header.Set("sec-fetch-site", "cross-site")
req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36")
req.Header.Set("x-authorization", "token:qgemv4jr1y38jyq6vhvi")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
五、运行结果
运行结果如下,从结果中可以看出,正常打印输出了json格式的response: