Jump to content

inetget() Catch the content of the 404 response returned by the webserver?


Recommended Posts

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 by rudi

Earth is flat, pigs can fly, and Nuclear Power is SAFE!

Link to comment
Share on other sites

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:

 

; 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!

Link to comment
Share on other sites

@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 by rudi

Earth is flat, pigs can fly, and Nuclear Power is SAFE!

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...