【问题标题】:How can make a Curl Store Cookie in Golang?如何在 Golang 中制作 Curl Store Cookie?
【发布时间】:2017-10-17 07:32:53
【问题描述】:

我想发送一个 post/get 请求,并且可以将 cookie 存储在 Program 附近的一个文件中。

示例 PHP 代码:

$___path="";
function send($url,$fields=array(),$reffer=false,$get=false)
{
    global $___path;
    $cookie_file_path = $___path."cookie.txt";//this file of cookies.
    $agent            = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1";
    $ch = curl_init(); 
    $headers[] = "Accept: */*";
    $headers[] = "Connection: Keep-Alive";
    curl_setopt($ch, CURLOPT_HTTPHEADER,  $headers);
    curl_setopt($ch, CURLOPT_HEADER,  0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);         
    if($reffer == false){}
    else
    {
        curl_setopt($ch,CURLOPT_REFERER,$reffer);
    }
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); 
    curl_setopt($ch, CURLOPT_URL, $url);
    if($get)
    {
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); 
    }
    else
    {
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POST, 1);
        if(count($fields) >= 1)
        {
            $POSTFIELDS = http_build_query($fields);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS);
        }
    }
    $result = curl_exec($ch); 
    return $result;
}

可以帮助我使用 cookie jar store 吗?

这没有样本:https://github.com/juju/persistent-cookiejar

可以写一个关于https://golang.org/pkg/net/http/#CookieJar 的样本吗?

【问题讨论】:

  • cj := http.CookieJar{} client := http.Client{Jar: cj} client.Get(...)
  • 文件名路径在哪里?!这如何将cookie存储在文件中?可以说示例代码吗?

标签: curl cookies go


【解决方案1】:

您无需将 cookie 保存到文件中,只需保持 go 进程运行即可。如果你真的想这样做,你会做这样的事情:

import "net/http/cookiejar"
import "net/http"
import "encoding/json"
import "io/ioutil"

cookies := make(map[string][]*http.Cookie)
jar, _ := cookiejar.New(nil)
client := http.Client{Jar: jar}
r, _ := client.Get(/* do whatever */)
siteCookies := jar.Cookies(r.Request.URL)
cookies[r.Request.URL.String()] = siteCookies
data, _ := json.Marshal(cookies)
ioutil.WriteFile("/path/to/cookies.txt", data, 0644)

然后当你开始时,你会读取那个文件,每个键调用url.Parse,然后用它来调用jar.SetCookies

https://play.golang.org/p/gQ_n6rPsdl

【讨论】:

  • 坦克你play.golang.org/p/kQR736EJTu,有错误:use of package cookiejar without selector
  • 成功了,谢谢。但是我怎样才能再次读取 cookie,以便在第二个请求中使用它?
猜你喜欢
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 2019-09-14
  • 2023-03-25
  • 1970-01-01
  • 2012-06-22
相关资源
最近更新 更多