shyiko / electron-har

A command-line tool for generating HTTP Archive (HAR) (based on Electron)
https://www.npmjs.com/package/electron-har
MIT License
47 stars 11 forks source link

An attempt to generate HAR resulted in error code -3. #8

Open aral opened 8 years ago

aral commented 8 years ago

On OS X, latest El Capitan, using zsh and the electron-har installed via

npm install -g electron-har

When I first tried:

electron-har http://cultofmac.com

It worked, and I got the HAR output to stdout.

Second time + all subsequent attempts, I’m getting:

An attempt to generate HAR resulted in error code -3.`

According to https://src.chromium.org/svn/trunk/src/net/base/net_error_list.h:

// An operation was aborted (due to user action).
NET_ERROR(ABORTED, -3)

Any ideas?

aral commented 8 years ago

Update: It definitely doesn’t do it for every site (e.g., works for google.com). In case it helps: if there a redirects, I seem to be getting multiple copies of the error on some sites. e.g., with @bmcminn’s fork:

./electron-har -A IPHONE_6 --debug -o latest.har http://forbes.com

Gives me:

An attempt to generate HAR resulted in error code -3. (error codes defined in http://src.chromium.org/svn/trunk/src/net/base/net_error_list.h) An attempt to generate HAR resulted in error code -3. (error codes defined in http://src.chromium.org/svn/trunk/src/net/base/net_error_list.h)

Hmm… and, oddly, the file is written out correctly despite those errors for forbes.com but not for cultofmac.com.

Curiouser & curiouser :)

bmcminn commented 8 years ago

I ran into this issue on certain requests I was testing...

The curious part is the documentation around erorr code -3. I don't see how a user action caused this error.

I just tested this with my fork, where http://cultofmac.com results in a server 301 redirect to http://www.cultofmac.com, however when I tried accessing http://www.cultofmac.com directly, the page responds with 200, but error code -3 still gets flagged. Not sure what chromium is trying to do here but it does seem odd.

$ bin/electron-har http://cultofmac.com --debug
An attempt to generate HAR resulted in error code -3.
(error codes defined in http://src.chromium.org/svn/trunk/src/net/base/net_error_list.h)

$ bin/electron-har http://www.cultofmac.com --debug
An attempt to generate HAR resulted in error code -3.
(error codes defined in http://src.chromium.org/svn/trunk/src/net/base/net_error_list.h)

EDIT: I found other websites that have a 301 redirect on page load and still generate a HAR file correctly.

So this doesn't seem super unique to 301 redirects. Something else is at work.

bmcminn commented 8 years ago

Alright, a bit more digging. The event did-fail-load which is used to initialize har-generation-failed yields a bit more information. Specifically in regards to the http://cultofmac.com HAR generation, it has a problem with this specific request: https://cm.g.doubleclick.net/push?client=ca-pub-9678236949631652&srn=gdn

This request errors on account of a 204 response (no content).

I'm thinking the conditional for the bw.webContext.on('did-fail-load'... handler is too generic which is causing a false positive fail response: https://github.com/shyiko/electron-har/blob/master/src/electron-har.js#L102

Commenting out the conditional allows the HAR file to generate correctly.

@shyiko, was this conditional defined to exit the process if the actual page request failed? because it seems the did-fail-load event fires for any failed request initialized by the page. From what I can see it may be necessary to add a wrapper conditional to see if the hostname partial for the did-fail-load callback url argument matches the URL hostname partial we passed to electron-har.

bmcminn commented 8 years ago

Oddly enough, Windows 7 Pro 64-bit doesn't experience this issue... more testing is needed :toilet:

Subsequent requests do fail however...

bmcminn commented 8 years ago

Came up with a temporary fix until the Electron issue #5013 linked above plays out. Pretty sure this is a separate issue considering we would need the response object of the request to determine what the problem was and potentially filter out the failure depending on the status code.

https://github.com/bmcminn/electron-har/blob/psuedo-mainFrame-test/src/electron-har.js#L213-L222

Where it falls short is if some domain asset responded 204, the problem would crop up again...

aral commented 8 years ago

it has a problem with this specific request: https://cm.g.doubleclick.net/push?client=ca-pub-9678236949631652&srn=gdn

What? Advertising breaking the web, unheard of! ;P </sarcasm>

Thank you so much for digging in and for the temporary fix. I only just found electron-har yesterday and haven’t worked previously with Electron but my goal, if we can integrate this into our workflow, is to dig into the codebase and try to help out going forward :)

bmcminn commented 8 years ago

Alright, have some details that I'm documenting here for further testing, but it's a start :P