分享
  1. 首页
  2. 文章

golang自动登录https连接并解析得到的json返回值

appletreesujie · · 3241 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

主要演示go语言自动登录HTPPS连接及cookie的使用,如何解析JSON数据等特性

https返回的json数据格式为

type item struct {
 Id, List_type, Severity int
 list_type_string, Name, Expiration string
 list_type_name, Severity_name string
}
type resData struct {
 Total_count, Total_page, Expect_page, Num_per_page int
 Sort_by, Sort_order string
 List []item
}

注意结构体必须是大写字母开头的成员才会被json.Unmarshal()处理到,对应的数据样例:

{
 "total_count" : 366,
 "total_page" : 1,
 "expect_page" : 1,
 "num_per_page" : 10000000,
 "sort_by" : "id",
 "sort_order" : "desc",
 "list" : [{
 "id" : 3263,
 "list_type" : 2,
 "list_type_string" : "File",
 "name" : "4CDA46B428405E8A155A3AA32E4F25C8EA09B707",
 "severity" : 3,
 "expiration" : "11\/14\/2014 04:51:06",
 "list_type_name" : "File",
 "severity_name" : "High"
 }, {
 "id" : 3262,
 "list_type" : 2,
 "list_type_string" : "File",
 "name" : "ECC3F6D2CB227981C12038D620336617C8EC0B64",
 "severity" : 3,
 "expiration" : "11\/12\/2014 10:02:21",
 "list_type_name" : "File",
 "severity_name" : "High"
 }
 ]
}

go源码如下

// https project main.go
package main
import (
 "crypto/tls"
 "encoding/json"
 "fmt"
 "io/ioutil"
 "net/http"
 "net/http/cookiejar"
 "net/url"
)
type item struct {
 Id, List_type, Severity int
 list_type_string, Name, Expiration string
 list_type_name, Severity_name string
}
type resData struct {
 Total_count, Total_page, Expect_page, Num_per_page int
 Sort_by, Sort_order string
 List []item
}
func check(err error) {
 if err != nil {
 panic(err)
 }
}
func main() {
 //登录URL,即提供账号登录的URL
 loginUrl := "https://10.64.71.8/cgi-bin/logon.cgi"
 loginData := url.Values{"usrname": {"admin"}, "passwd": {"trend#11"}, "isCookieEnable": {"1"}}
 //目标URL,即需要访问的URL
 targetUrl := "https://10.64.71.8/php/blacklist_whitelist_query.php"
 targetData := url.Values{"action": {"query"}, "black_or_white": {"sandbox"},
 "expect_page": {"1"}, "num_per_page": {"10000000"},
 "list_type": {"99"}, "keyword": {""}, "sort_by": {"id"}, "sort_order": {"desc"}}
 var resp *http.Response
 var err error
 var data []byte
 tr := &http.Transport{
 TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
 DisableCompression: true,
 }
 client := &http.Client{Transport: tr}
 //启用cookie
 client.Jar, _ = cookiejar.New(nil)
 resp, err = client.PostForm(loginUrl, loginData)
 check(err)
 resp, err = client.PostForm(targetUrl, targetData)
 check(err)
 if data, err = ioutil.ReadAll(resp.Body); err == nil {
 fmt.Printf("%s\n", data)
 }
//解析返回的JSON数据
 var message resData
 err = json.Unmarshal(data, &message)
 check(err)
 fmt.Printf("%+v\n", message)
 fmt.Printf("%v\t%v\n", message.Total_count, message.List[0].Name)
}

有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:appletreesujie

查看原文:golang自动登录https连接并解析得到的json返回值

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
3241 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏