Golang http.NewRequest GET带Header获取远程网页,并解析gzip压缩

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

最近小研究了一下GO语言,试着自己写了一个GET获取远程网页的例子。代码如下:


  1. func loginPre1() map[string]interface{} {
  2.  
  3. client := &http.Client{}
  4.  
  5. reqest, err := http.NewRequest("GET", "http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=Z3V5dWV0ZnRiJTQwMTYzLmNvbQ%3D%3D&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.5)&_=", nil)
  6.  
  7. if err != nil {
  8. fmt.Println("Fatal error ", err.Error())
  9. os.Exit(0)
  10. }
  11.  
  12. reqest.Header.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
  13. reqest.Header.Add("Accept-Encoding", "gzip, deflate")
  14. reqest.Header.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3")
  15. reqest.Header.Add("Connection", "keep-alive")
  16. reqest.Header.Add("Host", "login.sina.com.cn")
  17. reqest.Header.Add("Referer", "http://weibo.com/")
  18. reqest.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0")
  19. response, err := client.Do(reqest)
  20. defer response.Body.Close()
  21.  
  22. if err != nil {
  23. fmt.Println("Fatal error ", err.Error())
  24. os.Exit(0)
  25. }
  26.  
  27. if response.StatusCode == 200 {
  28.  
  29. var body string
  30.  
  31. switch response.Header.Get("Content-Encoding") {
  32. case "gzip":
  33. reader, _ := gzip.NewReader(response.Body)
  34. for {
  35.      buf := make([]byte, 1024)
  36. n, err := reader.Read(buf)
  37.  
  38. if err != nil && err != io.EOF {
  39. panic(err)
  40. }
  41.  
  42. if n == 0 {
  43. break
  44. }
  45. body += string(buf)
  46. }
  47. default:
  48. bodyByte, _ := ioutil.ReadAll(response.Body)
  49. body = string(bodyByte)
  50. }
  51.  
  52. r := regexp.MustCompile(`sinaSSOController.preloginCallBack\((.*?)\)`)
  53. rs := r.FindStringSubmatch(body)
  54.  
  55. //json decode
  56. header := make(map[string]interface{})
  57. err = json.Unmarshal([]byte(rs[1]), &header)
  58. if err != nil {
  59. fmt.Println("Fatal error ", err.Error())
  60. os.Exit(0)
  61. }
  62.  
  63. t := fmt.Sprintf("%f", header["servertime"])
  64.  
  65. header["servertime"] = strings.Trim(t, ".000000")
  66.  
  67. return header
  68. }
  69.  
  70. return nil
  71. }

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

本文来自:CSDN博客

感谢作者:u011509543

查看原文:Golang http.NewRequest GET带Header获取远程网页,并解析gzip压缩

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

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