Невозможно отправить запрос Go (EOF или «сброс соединения одноранговым узлом»), в то время как другие языки и curl успешно выполняются - PullRequest
0 голосов
/ 07 мая 2020

У меня проблема с одним запросом с Golang.

Он всегда возвращает ошибку EOF или «соединение сброшено одноранговым узлом» .

Однако, когда я использую другой язык, например Python (с использованием пакета «запросы») и curl , он успешно возвращает ответ.

Здесь у меня есть пример кода для этого запроса и соответствующая команда curl (я изменил конфиденциальную информацию, например файлы cookie) :

package main
import (
   "fmt"
   "io/ioutil"
   "net/http"
)
var (
   URL = "https://p4-msg.chat.zalo.me/?zpw_ver=49&zpw_type=30&params=1456344318999,1456344318999,eyIxIjp7Imxhc3RJZCI6IjE0NTYzNDQzMTg5OTkiLCJpZHMiOlsiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiXX0sIjIiOnsibGFzdElkIjoiMTQ1NjM0NDMxODk5OSIsImlkcyI6W119LCIzIjp7Imxhc3RJZCI6IjE0NTYzNDQzMTg5OTkiLCJpZHMiOlsiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5IiwiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5IiwiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5Il19fQ%3D%3D%2C1&ts=1587720743"
   Cookie = "__zi=3000.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.1; __zi-legacy=3000.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.1; fpsend=333333; zpsid=AAAA.333.3.1; zpsidleg=AAAA.333.3.1; zpw_sekm=AAAA.333.3.2; app.event.zalo.me=3333333333333333333; _zlang=vn; zpw_sek=AAAA.333.a0.F-AAAAAAAAAAAAAAAAAAAA-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB"
   Headers = map[string]string{
      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:75.0) Gecko/20100101 Firefox/75.0",
      "Accept": "application/json, text/plain",
      "Accept-Language": "en-US,en;q=0.5",
      "Content-Type": "application/x-www-form-urlencoded",
      "Connection": "keep-alive",
      //"Cookie": Cookie,
   }
)
/*
   CURL Command:
   curl "https://p4-msg.chat.zalo.me/?zpw_ver=49&zpw_type=30&params=1456344318999,1456344318999,eyIxIjp7Imxhc3RJZCI6IjE0NTYzNDQzMTg5OTkiLCJpZHMiOlsiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiXX0sIjIiOnsibGFzdElkIjoiMTQ1NjM0NDMxODk5OSIsImlkcyI6W119LCIzIjp7Imxhc3RJZCI6IjE0NTYzNDQzMTg5OTkiLCJpZHMiOlsiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5IiwiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5IiwiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5Il19fQ%3D%3D%2C1&ts=1587720743" -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:75.0) Gecko/20100101 Firefox/75.0' -H 'Accept: application/json, text/plain' -H 'Accept-Language: en-US,en;q=0.5' -H 'Content-Type: application/x-www-form-urlencoded' -H 'Connection: keep-alive' -H 'Cookie: __zi=3000.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.1; __zi-legacy=3000.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.1; fpsend=333333; zpsid=AAAA.333.3.1; zpsidleg=AAAA.333.3.1; zpw_sekm=AAAA.333.3.2; app.event.zalo.me=3333333333333333333; _zlang=vn; zpw_sek=AAAA.333.a0.F-AAAAAAAAAAAAAAAAAAAA-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB'
*/
func main() {
   curl := fmt.Sprintf(`curl "%s"`, URL)
   client := http.DefaultClient
   request, err := http.NewRequest("GET", URL, nil)
   if err != nil {
      fmt.Println("new request error", err.Error())
      return
   }
   for k, v := range Headers {
      curl = fmt.Sprintf("%s -H '%s: %s'", curl, k, v)
      request.Header.Set(k, v)
   }
    for _, v := range strings.Split(Cookie, ";") {
        if len(v) < 1 {
            continue
        }

        tmp := strings.Split(v, "=")
        if len(tmp) < 2 {
            continue
        }

        request.AddCookie(&http.Cookie{
            Name:       tmp[0],
            Value:      tmp[1],
            Path:       "",
            Domain:     "p4-msg.chat.zalo.me",
            Expires:    time.Time{},
            RawExpires: "",
            MaxAge:     0,
            Secure:     false,
            HttpOnly:   false,
            SameSite:   0,
            Raw:        "",
            Unparsed:   nil,
        })
    }

   fmt.Println(curl)
   resp, err := client.Do(request)
   if err != nil {
      fmt.Println("request error", err.Error())
      return
   }
   defer resp.Body.Close()
   content, err := ioutil.ReadAll(resp.Body)
   if err != nil {
      fmt.Println("read body error", err.Error())
      return
   }
   fmt.Printf("response: %s\n", content)
}

EDIT : Я добавил раздел AddCook ie. Результат все тот же.

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Как упоминал @Adrian, вместо этого вам следует сделать следующее:

package main
import (
   "fmt"
   "io/ioutil"
   "net/http"
)
var (
   URL = "https://p4-msg.chat.zalo.me/?zpw_ver=49&zpw_type=30&params=1456344318999,1456344318999,eyIxIjp7Imxhc3RJZCI6IjE0NTYzNDQzMTg5OTkiLCJpZHMiOlsiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiXX0sIjIiOnsibGFzdElkIjoiMTQ1NjM0NDMxODk5OSIsImlkcyI6W119LCIzIjp7Imxhc3RJZCI6IjE0NTYzNDQzMTg5OTkiLCJpZHMiOlsiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5IiwiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5IiwiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5Il19fQ%3D%3D%2C1&ts=1587720743"
   Cookie = "__zi=3000.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.1; __zi-legacy=3000.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.1; fpsend=333333; zpsid=AAAA.333.3.1; zpsidleg=AAAA.333.3.1; zpw_sekm=AAAA.333.3.2; app.event.zalo.me=3333333333333333333; _zlang=vn; zpw_sek=AAAA.333.a0.F-AAAAAAAAAAAAAAAAAAAA-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB"
   Headers = map[string]string{
      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:75.0) Gecko/20100101 Firefox/75.0",
      "Accept": "application/json, text/plain",
      "Accept-Language": "en-US,en;q=0.5",
      "Content-Type": "application/x-www-form-urlencoded",
      "Connection": "keep-alive",
   }
)
/*
   CURL Command:
   curl "https://p4-msg.chat.zalo.me/?zpw_ver=49&zpw_type=30&params=1456344318999,1456344318999,eyIxIjp7Imxhc3RJZCI6IjE0NTYzNDQzMTg5OTkiLCJpZHMiOlsiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiXX0sIjIiOnsibGFzdElkIjoiMTQ1NjM0NDMxODk5OSIsImlkcyI6W119LCIzIjp7Imxhc3RJZCI6IjE0NTYzNDQzMTg5OTkiLCJpZHMiOlsiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5IiwiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5IiwiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5Il19fQ%3D%3D%2C1&ts=1587720743" -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:75.0) Gecko/20100101 Firefox/75.0' -H 'Accept: application/json, text/plain' -H 'Accept-Language: en-US,en;q=0.5' -H 'Content-Type: application/x-www-form-urlencoded' -H 'Connection: keep-alive' -H 'Cookie: __zi=3000.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.1; __zi-legacy=3000.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.1; fpsend=333333; zpsid=AAAA.333.3.1; zpsidleg=AAAA.333.3.1; zpw_sekm=AAAA.333.3.2; app.event.zalo.me=3333333333333333333; _zlang=vn; zpw_sek=AAAA.333.a0.F-AAAAAAAAAAAAAAAAAAAA-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB'
*/
func main() {
   curl := fmt.Sprintf(`curl "%s"`, URL)
   client := http.DefaultClient
   request, err := http.NewRequest("GET", URL, nil)
   if err != nil {
      fmt.Println("new request error", err.Error())
      return
   }
   for k, v := range Headers {
      curl = fmt.Sprintf("%s -H '%s: %s'", curl, k, v)
      request.Header.Set(k, v)
   }

   request.AddCookie(&http.Cookie{
       Raw: Cookie,
   })

   fmt.Println(curl)
   resp, err := client.Do(request)
   if err != nil {
      fmt.Println("request error", err.Error())
      return
   }
   defer resp.Body.Close()
   content, err := ioutil.ReadAll(resp.Body)
   if err != nil {
      fmt.Println("read body error", err.Error())
      return
   }
   fmt.Printf("response: %s\n", content)
}

0 голосов
/ 11 мая 2020

Ваши заголовки неверны, насколько я могу судить. Вы выполняете HTTP-запрос GET, но определяете заголовок Content-Type как application/x-www-form-urlencoded, который используется при выдаче HTTP-запроса POST ... Кроме того, заголовок Connection, для которого установлено значение keep-alive, не должен

Когда я изменяю это в вашем коде:

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

var (
    URL     = "https://p4-msg.chat.zalo.me/?zpw_ver=49&zpw_type=30&params=1456344318999,1456344318999,eyIxIjp7Imxhc3RJZCI6IjE0NTYzNDQzMTg5OTkiLCJpZHMiOlsiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiXX0sIjIiOnsibGFzdElkIjoiMTQ1NjM0NDMxODk5OSIsImlkcyI6W119LCIzIjp7Imxhc3RJZCI6IjE0NTYzNDQzMTg5OTkiLCJpZHMiOlsiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5IiwiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5IiwiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5Il19fQ%3D%3D%2C1&ts=1587720743"
    Cookie  = "__zi=3000.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.1; __zi-legacy=3000.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.1; fpsend=333333; zpsid=AAAA.333.3.1; zpsidleg=AAAA.333.3.1; zpw_sekm=AAAA.333.3.2; app.event.zalo.me=3333333333333333333; _zlang=vn; zpw_sek=AAAA.333.a0.F-AAAAAAAAAAAAAAAAAAAA-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB"
    Headers = map[string]string{
        "User-Agent":      "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:75.0) Gecko/20100101 Firefox/75.0",
        "Accept":          "application/json, text/plain",
        "Accept-Language": "en-US,en;q=0.5",
        // "Content-Type":    "application/x-www-form-urlencoded",
        // "Connection":      "keep-alive",
    }
)

/*
   CURL Command:
   curl "https://p4-msg.chat.zalo.me/?zpw_ver=49&zpw_type=30&params=1456344318999,1456344318999,eyIxIjp7Imxhc3RJZCI6IjE0NTYzNDQzMTg5OTkiLCJpZHMiOlsiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiXX0sIjIiOnsibGFzdElkIjoiMTQ1NjM0NDMxODk5OSIsImlkcyI6W119LCIzIjp7Imxhc3RJZCI6IjE0NTYzNDQzMTg5OTkiLCJpZHMiOlsiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5IiwiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5IiwiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5Il19fQ%3D%3D%2C1&ts=1587720743" -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:75.0) Gecko/20100101 Firefox/75.0' -H 'Accept: application/json, text/plain' -H 'Accept-Language: en-US,en;q=0.5' -H 'Content-Type: application/x-www-form-urlencoded' -H 'Connection: keep-alive' -H 'Cookie: __zi=3000.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.1; __zi-legacy=3000.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.1; fpsend=333333; zpsid=AAAA.333.3.1; zpsidleg=AAAA.333.3.1; zpw_sekm=AAAA.333.3.2; app.event.zalo.me=3333333333333333333; _zlang=vn; zpw_sek=AAAA.333.a0.F-AAAAAAAAAAAAAAAAAAAA-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB'
*/
func main() {
    curl := fmt.Sprintf(`curl "%s"`, URL)
    client := http.DefaultClient
    request, err := http.NewRequest("GET", URL, nil)
    if err != nil {
        fmt.Println("new request error", err.Error())
        return
    }
    for k, v := range Headers {
        curl = fmt.Sprintf("%s -H '%s: %s'", curl, k, v)
        request.Header.Set(k, v)
    }

    request.AddCookie(&http.Cookie{
        Raw: Cookie,
    })

    fmt.Println(curl)
    resp, err := client.Do(request)
    if err != nil {
        fmt.Println("request error", err.Error())
        return
    }
    defer resp.Body.Close()
    content, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("read body error", err.Error())
        return
    }
    fmt.Printf("response: %s\n", content)
}

Запуск, который приводит к:

curl "https://p4-msg.chat.zalo.me/?zpw_ver=49&zpw_type=30&params=1456344318999,1456344318999,eyIxIjp7Imxhc3RJZCI6IjE0NTYzNDQzMTg5OTkiLCJpZHMiOlsiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiXX0sIjIiOnsibGFzdElkIjoiMTQ1NjM0NDMxODk5OSIsImlkcyI6W119LCIzIjp7Imxhc3RJZCI6IjE0NTYzNDQzMTg5OTkiLCJpZHMiOlsiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5IiwiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5IiwiMTQ1NjM0NDMxODk5OSIsIjE0NTYzNDQzMTg5OTkiLCIxNDU2MzQ0MzE4OTk5Il19fQ%3D%3D%2C1&ts=1587720743" -H 'Accept-Language: en-US,en;q=0.5' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:75.0) Gecko/20100101 Firefox/75.0' -H 'Accept: application/json, text/plain'
response: {"error_code":600,"error_message":"zpw_sek not found or invalid","data":null}
...