使用Go语言编写Socks5代理自动获取程序
package main import ( "bytes" "encoding/json" "fmt" "io" "io/ioutil" "net/http" "net/url" "strings" "time" ) func main() { aLine := getone() for _, ipaddrport := range aLine { fmt.Println(ipaddrport) } } //填写Token密钥 var token = "" func getone() []string { sUrl := "http://list.rola-ip.site:8088/user_get_ip_list" query := url.Values{} query.Add("token", token) query.Add("qty", "100") //每次获取IP数量 query.Add("country", "us") //国家 query.Add("time", "5") query.Add("format", "json") //返回格式 query.Add("protocol", "socks5") //筛选格式 query.Add("filter", "1") //是否去重 statusCode, apiResJson := HttpRequestJson("GET", sUrl, query, nil) if apiResJson.Code == 101 { fmt.Println("GET_IP_LIST", statusCode, apiResJson.Code, apiResJson.Msg) aMsg := strings.SplitN(string(apiResJson.Msg), " ", 2) ip := aMsg[0] //msg := aMsg[1] del_whitelist_by_remark("golang") user_add_whitelist(ip, "golang") time.Sleep(5 * time.Second) return getone() } aRows := apiResJson.Data.([]interface{}) aRet := []string{} for _, _mRow := range aRows { mRow := _mRow.(string) aRet = append(aRet, mRow) } return aRet } func del_whitelist_by_remark(remark string) { aRows := user_get_whitelist() for _, _mRow := range aRows { mRow := _mRow.(map[string]interface{}) //fmt.Println(mRow) sRemark := mRow["remark"].(string) sIp := mRow["ip"].(string) if sRemark == remark { user_del_whitelist(sIp) } } } func user_get_whitelist() []interface{} { //查看白名单 sUrl := "http://admin.rola-ip.co/user_get_whitelist" query := url.Values{} query.Add("token", token) _, jsonResponse := HttpRequestJson("GET", sUrl, query, nil) aRows := jsonResponse.Data.([]interface{}) return aRows } func user_add_whitelist(ip string, remark string) { //添加白名单 sUrl := "http://admin.rola-ip.co/user_add_whitelist" query := url.Values{} query.Add("token", token) query.Add("ip", ip) query.Add("remark", remark) statusCode, jsonResponse := HttpRequestJson("GET", sUrl, query, nil) fmt.Println("user_add_whitelist", statusCode, jsonResponse.Code, jsonResponse.Data, jsonResponse.Msg) } func user_del_whitelist(ip string) { //删除白名单 sUrl := "http://admin.rola-ip.co/user_del_whitelist" query := url.Values{} query.Add("token", token) query.Add("ip", ip) statusCode, jsonResponse := HttpRequestJson("GET", sUrl, query, nil) fmt.Println("user_del_whitelist", statusCode, jsonResponse.Code, jsonResponse.Data, jsonResponse.Msg) } /* HTTP处理用函数 */ type JsonRequest struct { } type JsonResponse struct { Code int32 `json:"code"` Data interface{} `json:"data"` Msg string `json:"msg"` } func HttpRequestJson(method string, sUrl string, query url.Values, userReqJson interface{}) (int, JsonResponse) { //以JSON形式提交并返回JSON bReqData, err := json.Marshal(userReqJson) if err != nil { panic(err) } statusCode, clientResBody := HttpRequestByte(method, sUrl, query, bytes.NewBuffer(bReqData)) apiResJson := JsonResponse{} err = json.Unmarshal(clientResBody, &apiResJson) if err != nil { panic(err) } return statusCode, apiResJson } func HttpRequestByte(method string, sUrl string, query url.Values, body io.Reader) (int, []byte) { //以byte数组返回结果 if query != nil { sUrl += "?" + query.Encode() } clientReq, err := http.NewRequest(method, sUrl, body) if err != nil { panic(err) } httpClient := &http.Client{} clientRes, err := httpClient.Do(clientReq) //向后端服务器提交数据 if err != nil { panic(err) } clientResBody, err := ioutil.ReadAll(clientRes.Body) //取得后端服务器返回的数据 clientRes.Body.Close() if err != nil { panic(err) } return clientRes.StatusCode, clientResBody }