拦截对golang进程的响应

拦截对golang进程的响应

问题描述:

我有一个激活浏览器的进程,它向本地服务器发出请求。 服务器应该回应,但我不知道如何看,客户端,答案。 我需要的是提出请求的浏览器。我不想用http.NewRequest自己写。拦截对golang进程的响应

client.go:

func openChrome() { 

    var page = "https://localhost:1333/" 

    program := "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe" 
    url := []string{"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe", page} 
    attr := &os.ProcAttr{ 
    Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, 
    } 

    proc,err:=os.StartProcess(program, url, attr) 
    proc.Wait(); 

    // if err!=nil, log.Fatal(err) 
} 
+0

你的论点对我来说似乎是错误的(他们重复程序名称)。我的猜测是,铬只是失败并立即退出;尽管这应该显示stderr的东西。任何特别的原因,而不是使用os/exec呢?这有点容易使用。 – Peter

+0

@Peter,因为我不能选择浏览器...... exec.Command用机器上的默认浏览器打开页面,是否正确? – naomi

+0

os/exec执行你作为exec.Command的第一个参数传递的任何东西。实际上,os/exec是用os.Process实现的;它只是有一个更简单的界面(和上下文支持)。 https://play.golang.org/p/8LWDvkfACq – Peter

查看响应,并具有容易控制的请求可以使用的工具,像chromedpchromedriver(与webdriver)或selenium加载网页并找到浏览器的响应。所有这些应该可以在不同程度上被访问,并且可以用来驱使浏览器经历标准请求周期,就好像人正在这样做(加载内容并查询加载的内容)。

您可以从启动的进程中看到stdout和stderr,但这不太可能帮助您完成此特定任务,因此我忽略了这一点。

你不给出排除直接请求的理由,但对于完全控制,这将是另一种可能性,除非需要呈现html,否则您的代码可以完成浏览器可以执行的任何操作(更改用户代理,解析html等等)。