zoukankan      html  css  js  c++  java
  • 使用go的http获取三方API的数据

      新项目用go写,还是对接第三方平台的项目:根据API提供的URL获取数据。

      其实换汤不换药,类似一个非常简单的爬虫项目,只不过需要用到三方的API。

      这里直接给出具体代码,刚刚入门go不久,先暂时写一个同步的代码实现效果,后续慢慢加上并发以及写入数据库的完整处理流程:

    基础代码

    package main
    
    import (
        "fmt"
        "io/ioutil"
        "log"
        "net/http"
    )
    
    func main() {
        // 三方平台的token
        token := "xxx"
    
        client := &http.Client{}
        // get请求
        req, err := http.NewRequest("GET", "https://adsapi.snapchat.com/v1/me/organizations", nil)
        if err != nil {
            fmt.Println(err)
            log.Fatal(err)
        }
        // 在请求头中加入校验的token
        req.Header.Set("Authorization", "Bearer " + token)
        resp, err := client.Do(req)
        if err != nil {
            fmt.Println(err)
            log.Fatal(err)
        }
        bodyText, err := ioutil.ReadAll(resp.Body)
        if err != nil {
            fmt.Println(err)
            log.Fatal(err)
        }
        fmt.Printf("%s
    ", bodyText)
    }
    基础代码

    请求数据并将结果转换为map类型的方法

    // 返回 map的请求方法
    func baseRqeuest(args ...string) map[string]interface{} {
        // token requestMethod url 三个参数是有顺序的!
        token := args[0]
        requestMethod := args[1]
        url := args[2]
        client := &http.Client{}
        // get请求
        req, err := http.NewRequest(requestMethod, url, nil)
        if err != nil {
            fmt.Println(err)
            log.Fatal(err)
        }
        // 在请求头中加入校验的token
        req.Header.Set("Authorization", "Bearer "+token)
        resp, err := client.Do(req)
        if err != nil {
            fmt.Println(err)
            log.Fatal(err)
        }
        returnMap, err := ParseResponse(resp)
        return returnMap
    }
    
    
    // 解析http请求返回的内容 ———— 转换为 map[string]interface{}
    func ParseResponse(response *http.Response) (map[string]interface{}, error) {
        var result map[string]interface{}
        body, err := ioutil.ReadAll(response.Body)
        if err == nil {
            err = json.Unmarshal(body, &result)
        }
        return result, err
    }
    View Code 

    请求数据并将结果转换为string类型的方法

    // base
    func baseRqeuestString(args ...string) string {
        // token requestMethod url 三个参数是有顺序的!
        token := args[0]
        requestMethod := args[1]
        url := args[2]
        client := &http.Client{}
        // get请求
        req, err := http.NewRequest(requestMethod, url, nil)
        if err != nil {
            fmt.Println(err)
            log.Fatal(err)
        }
        // 在请求头中加入校验的token
        req.Header.Set("Authorization", "Bearer "+token)
        resp, err := client.Do(req)
        if err != nil {
            fmt.Println(err)
            log.Fatal(err)
        }
        returnStr, err := ParseResponseString(resp)
        //fmt.Println("returnStr>>> " + returnStr) // TODO HTTP字节流转为str的结果
        return returnStr
    }
    
    
    // 解析http请求返回的内容 ———— 转换为 string
    func ParseResponseString(response *http.Response) (string, error) {
        //var result map[string]interface{}
        body, err := ioutil.ReadAll(response.Body) // response.Body 是一个数据流
        return string(body), err                   // 将 io数据流转换为string类型返回!
    }
    View Code

     ~~~

  • 相关阅读:
    网络数据处理缓冲区和缓冲池实现
    主机入侵防御系统(HIPS)分析
    Windows的进程间通信
    Windows的进程间通信
    通过HookNtCreateSection 动态监控驱动sys、动态链接库dll、可执行文件exe加载
    通过HookNtCreateSection 动态监控驱动sys、动态链接库dll、可执行文件exe加载
    HOOK NtCreateSection
    HOOK NtCreateSection
    CreateProcess函数详解及示例
    CreateProcess函数详解及示例
  • 原文地址:https://www.cnblogs.com/paulwhw/p/13881261.html
Copyright © 2011-2022 走看看