Slide 33
Slide 33 text
crawlera-headless-proxy
1. brokenSessionID := ctx.Req.Header.Get("X-Crawlera-Session")
2. mgr.getBrokenSessionChan() <- brokenSessionID
3. if item := s.sessionChans.Get(rstate.ID); item != nil {
4. close(item.Value().(chan <- string))
5. }
6.
7. sessionID := mgr.getSessionID(true)
8. switch value := sessionID.(type) {
9. case chan <- string:
10. ctx.Req.Header.Set("X-Crawlera-Session", sessionID)
11. resp, err := rstate.DoCrawleraRequest(s.httpClient, ctx.Req)
12. if err != nil || resp.Header.Get("X-Crawlera-Error") != "" {
13. mgr.getBrokenSessionChan() <- sessionID
14. }
15. return resp
16. default:
17. defer close(sessionIDChan)
18. ctx.Req.Header.Set("X-Crawlera-Session", "create")
19. resp, err := rstate.DoCrawleraRequest(s.httpClient, ctx.Req)
20. if err == nil && resp.Header.Get("X-Crawlera-Error") == "" {
21. sessionID := resp.Header.Get("X-Crawlera-Session")
22. sessionIDChan <- sessionID
23. }
24. return resp
25. }