拦截对golang中进程的响应

拦截对golang中进程的响应,go,browser,process,request,response,Go,Browser,Process,Request,Response,我有一个激活浏览器的进程,它向本地服务器发出请求。 服务器应该响应,但我不知道如何看到客户端的答案。 我需要的是发出请求的浏览器。我不想自己用http.NewRequest编写它 client.go: func openChrome() { var page = "https://localhost:1333/" program := "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe" url :=

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

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)
}

要查看响应并更轻松地控制请求,可以使用(with)或之类的工具加载页面并在浏览器中查找响应。所有这些都应该可以从go中不同程度地访问,并且可以用来驱动浏览器完成标准请求周期,就像一个人在做一样(加载内容并查询加载的内容)

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


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

您的参数在我看来似乎是错误的(它们重复程序名)。我的猜测是chrome会立即失效并退出;虽然这应该会在stderr上显示一些东西。是否有任何不使用os/exec的特殊原因?这更容易使用。@Peter,因为我无法选择浏览器。。。exec.Command使用机器上的默认浏览器打开页面,是否正确??os/exec将执行作为exec.Command的第一个参数传递的任何内容。实际上,os/exec是用os.Process实现的;它只是有一个更简单的接口(和上下文支持)。