2017-08-24 60 views
1

我有一個激活瀏覽器的進程,它向本地服務器發出請求。 服務器應該回應,但我不知道如何看,客戶端,答案。 我需要的是提出請求的瀏覽器。我不想用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

回答

1

查看響應,並具有容易控制的請求可以使用的工具,像chromedpchromedriver(與webdriver)或selenium加載網頁並找到瀏覽器的響應。所有這些應該可以在不同程度上被訪問,並且可以用來驅使瀏覽器經歷標準請求週期,就好像人正在這樣做(加載內容並查詢加載的內容)。

您可以從啓動的進程中看到stdout和stderr,但這不太可能幫助您完成此特定任務,因此我忽略了這一點。

你不給出排除直接請求的理由,但對於完全控制,這將是另一種可能性,除非需要呈現html,否則您的代碼可以完成瀏覽器可以執行的任何操作(更改用戶代理,解析html等等)。