rudi Posted April 6, 2022 Posted April 6, 2022 (edited) Hello, is there a way to use inetget() to catch the content of an 404 error page returned by the web server? $URL="https://www.autoitscript.com/ThisPathDoesntExist" $content=InetGet($url,"c:\temp\xxx.html",1+2) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $content = "' & $content & """" & @CRLF & "@Extended: """ & @extended & """" & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console >"C:\Program Files (x86)\AutoIt3\SciTE\..\AutoIt3.exe" "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "C:\temp\löschmich\xxx.au3" /UserParams +>15:27:05 Starting AutoIt3Wrapper v.18.708.1148.0 SciTE v.4.1.0.0 Keyboard:00000407 OS:WIN_10/ CPU:X64 OS:X64 Environment(Language:0407) CodePage:0 utf8.auto.check:4 +> SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE UserDir => C:\Users\admin.AD\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\admin.AD\AppData\Local\AutoIt v3\SciTE >Running AU3Check (3.3.14.5) from:C:\Program Files (x86)\AutoIt3 input:C:\temp\löschmich\xxx.au3 +>15:27:05 AU3Check ended.rc:0 >Running:(3.3.14.5):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\temp\löschmich\xxx.au3" --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop @@ Debug(6) : $content = "0" @Extended: "0" >Error code: 13 +>15:27:05 AutoIt3.exe ended.rc:0 +>15:27:05 AutoIt3Wrapper Finished. >Exit code: 0 Time: 0.9361 The browser (I use Chrome) is displaying this 404 page: (That's what I'd like to catch) Not Found The requested URL /ThisPathDoesntExist was not found on this server. html code (Browser ctrl+u): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL /ThisPathDoesntExist was not found on this server.</p> </body></html> Wireshark response 404 packet: Hypertext Transfer Protocol HTTP/1.1 404 Not Found\r\n Server: nginx\r\n Date: Wed, 06 Apr 2022 13:34:26 GMT\r\n Content-Type: text/html; charset=iso-8859-1\r\n Content-Length: 217\r\n Connection: keep-alive\r\n Vary: Accept-Encoding\r\n \r\n [HTTP response 1/1] [Time since request: 0.056074000 seconds] [Request in frame: 1476] [Request URI: http://www.autoitscript.com/ThisPathDoesntExist] File Data: 217 bytes Line-based text data: text/html (7 lines) <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL /ThisPathDoesntExist was not found on this server.</p> </body></html> any suggestions appreciated, <edit> also tried _inetgetsource() and inetread() </edit> Rudi Edited April 6, 2022 by rudi Earth is flat, pigs can fly, and Nuclear Power is SAFE!
Danp2 Posted April 6, 2022 Posted April 6, 2022 You should be able to do this with WinHTTP (either the UDF or manually with the winhttp.winhttprequest.5.1 object). Can you explain more about what your script is attempting to automate? Latest Webdriver UDF Release Webdriver Wiki FAQs
rudi Posted April 6, 2022 Author Posted April 6, 2022 Hello @Danp2 you are right, I searched and found that WinHTTP UDF by @trancexx and @ProgAndy , didn't know it before. Thanks for pointing out that UDF! This code is doing excatly what I need: expandcollapse popup; modified from the CHM help file for WinHTTP 1.6.4.1, topic _WinHttpReadData #include-once #include "C:\temp\WinHTTP\1.6.4.1\WinHttp.au3" #include "C:\temp\WinHTTP\1.6.4.1\WinHttpConstants.au3" $sDomain = "www.autoitscript.com" $sPage = "/ThisPathDoesntExist" ; Data to send ; $sAdditionalData = "name=" & $sUserName & "&email=" & $sEmail ; Initialize and get session handle $hOpen = _WinHttpOpen("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0") ; Get connection handle $hConnect = _WinHttpConnect($hOpen, $sDomain) ; Make a request $hRequest = _WinHttpOpenRequest($hConnect, "GET", $sPage) ; Send it. Specify additional data to send too. This is required by the Google API: _WinHttpSendRequest($hRequest, "Content-Type: application/x-www-form-urlencoded") ; Wait for the response _WinHttpReceiveResponse($hRequest) ; See what is returned Dim $sReturned If _WinHttpQueryDataAvailable($hRequest) Then ; if there is data Do $sReturned &= _WinHttpReadData($hRequest) Until @error EndIf ; Close handles _WinHttpCloseHandle($hRequest) _WinHttpCloseHandle($hConnect) _WinHttpCloseHandle($hOpen) ; See what is returned MsgBox(4096, "Returned", $sReturned) ConsoleWrite($sReturned & @CRLF) >"C:\Program Files (x86)\AutoIt3\SciTE\..\AutoIt3.exe" "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "C:\temp\löschmich\xxx.au3" /UserParams +>17:15:42 Starting AutoIt3Wrapper v.18.708.1148.0 SciTE v.4.1.0.0 Keyboard:00000407 OS:WIN_10/ CPU:X64 OS:X64 Environment(Language:0407) CodePage:0 utf8.auto.check:4 +> SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE UserDir => C:\Users\admin.AD\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\admin.AD\AppData\Local\AutoIt v3\SciTE >Running AU3Check (3.3.14.5) from:C:\Program Files (x86)\AutoIt3 input:C:\temp\löschmich\xxx.au3 +>17:15:42 AU3Check ended.rc:0 >Running:(3.3.14.5):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\temp\löschmich\xxx.au3" --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL /ThisPathDoesntExist was not found on this server.</p> </body></html> +>17:15:55 AutoIt3.exe ended.rc:0 +>17:15:55 AutoIt3Wrapper Finished. >Exit code: 0 Time: 13.99 Earth is flat, pigs can fly, and Nuclear Power is SAFE!
rudi Posted April 6, 2022 Author Posted April 6, 2022 (edited) @Danp2 <cite> can you explain more what your script is doing?</cite> There was a major release upgrade for our PPS For many articles in the PPS there are CAD drawings. One possible property of articles is the name of the associated drawing for the old PPS system there was a java servlet that did return the drawing name for a given article number: Example: $URL='http://10.27.10.81/Fehlteil/ident2zeichnr.jsp?identnr="123456"' It always [200] returned content: either holding the name of the according drawing, or, if the article existed but no drawing, or even the article didn't exist at all a "empty page" (http 200) any @error returned pointed out a malfunction of the java servlet URL (what showed up time by time, quite rarely) This java servlet had to be rewritten due to the release upgrade mentioned above, and this was done using different java servlet tools. Now the behavior changed: Article exists, property "drawing" is populated: http [200] <drawing name> Article exists, property "drawing" not populated: http [404] "ERROR: ZEICHNR NOT FOUND" Article doesn't exist at all: http [404] "ERROR: IDENTNR NOT FOUND" My script for the old java servlet used inetread(), also tried inetget(), both return just an error but not the content of the html [404] page. Thanks for your help, Rudi. Edited April 6, 2022 by rudi Danp2 1 Earth is flat, pigs can fly, and Nuclear Power is SAFE!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now