2015-10-01 23 views
5
req, err := http.NewRequest("GET", "http://example.com", nil) 
req.AddCookie(&http.Cookie{Name: "c", Value: "ccc"}) 
resp, err := client.Do(req) 

Tôi cần lưu vào bộ nhớ cache trên đĩa và giữ kiểu của nó là http.Response sau khi khôi phục từ bộ nhớ cache. Bất kỳ ý tưởng nào?Làm thế nào để cache http.Response trong golang?

+1

Bạn đã thử một số chương trình tại đây chưa? Hoặc bạn có mong đợi để tìm một số gói với lỗi 'func DumpResponse (chuỗi tên tệp) ma thuật' và' func Loadesponse (chuỗi tên tệp) (* http.Response, error) '? – Volker

+0

@Volker Tôi hỏi ý kiến, chưa sẵn sàng gói. – nanolab

+0

chuyển 'resp' thành mảng' byte' và ghi vào một tệp. http://stackoverflow.com/questions/26372227/go-conversion-between-struct-and-byte-array –

Trả lời

12

Cách dễ nhất là sử dụng httputil.DumpResponsehttp.ReadResponse.

See here for an example. (Bạn phải sao chép mã vào máy cục bộ của bạn và chạy nó ở đó, bởi vì Sân chơi không cho phép I/O)

Bãi chứa đầu tiên yêu cầu của bạn khi nhận được, tùy chọn cũng bán phá giá cơ thể, byte [] mà bạn có thể ghi vào đĩa. Sau đó bạn có thể đọc phản hồi từ đĩa (hoặc nơi bạn đã lưu trữ nó) và bọc nó trong một bufio.Reader, mà bạn chuyển tới http.ReadResponse.

ReadResponse mất * http.Request là tham số thứ hai được sử dụng làm giá trị cho trường Yêu cầu của phản hồi. Nếu nil được đưa ra, phản hồi trả về sẽ có yêu cầu GET trong trường Request của nó.

+0

Hoạt động tuyệt vời! Cảm ơn bạn! – nanolab

4

... Hoặc sử dụng https://github.com/lox/httpcache. Một http.Handler golang phù hợp với RFC7234 để lưu vào bộ nhớ cache các câu trả lời HTTP

Các vấn đề liên quan