Jump to content

Request UDF - The simplest way to make HTTP request


Ward
 Share

Recommended Posts

Like Request for node.js or Requests for python, Request UDF is a powerful and easy-to-use HTTP client for AutoIt. 

It is based on my Curl.au3 and Json.au3 (not included). 

The Features:

  • Request target can be a string (single url), an array (urls), an object (single url + options or url array + options), an object array (urls + different options), or a json string (decode to array or object automatically), etc.
  • Easy to setup post data, cookies, agent, refer, timeout, proxy, etc.
  • Easy to setup the default options before a series of requests.
  • Use BinaryToString() to decode the returned data according to content type automatically. 
  • Use curl multi interface by default. It means all requests will transfer simultaneously and won't block the GUI event.
  • Use callback function to recieve the data and information for every url before main function finished.
  • Supports https and ftp protocols.

Example:

#Include "Json.au3"
#Include "Curl.au3"
#Include "Request.au3"

RequestDefault('{refer: "http://www.autoitscript.com", agent: "AutoIt/Request", callback: "MyCallback"}')

Local $Data = Request("http://httpbin.org/get")
ConsoleWrite($Data & @LF)

Request('["http://www.google.com", "http://wikipedia.org"]')
Request('{url: "http://www.google.com", agent: "AutoIt/Request"}')
Request('{url: ["http://www.google.com", "http://wikipedia.org"], agent: "AutoIt/Request"}')
Local $Array[] = ["http://www.google.com", "http://wikipedia.org"]
Request($Array)
Request("http://httpbin.org/post", "key=Post%20can%20be%20the%20raw%20data")
Request("http://httpbin.org/post", '{key: "Post can be a json object string"}')
Request('{url: "http://httpbin.org/post", post:{key: "Post can be set as second paramemtr or \"post\" option"}}')
Local $Obj
Json_Put($Obj, ".key", "Post can be an object")
Local $Json = Request("http://httpbin.org/post", $Obj)

Func MyCallback($Obj)
    Local $Data = Json_ObjGet($Obj, "Data")
    Local $EffectiveUrl = Json_ObjGet($Obj, "EffectiveUrl")
    ConsoleWrite("Callback: " & $EffectiveUrl & " download size: " & StringLen($Data) & @LF)
EndFunc

More examples are in the archive.

Request.zip

Edited by Ward

新版 _ArrayAdd 的白痴作者,不管是誰,去死一死好了

 

Link to comment
Share on other sites

Added to the UDF list in the wiki :)

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

@Ward: which is the right BinaryCall.au3?  (It's in two of the zips.)

I went with the 2015 version and got some undefined fcns.

Also, I got the error below.  Typo?

 

Error.PNG

Edited by qwert
Link to comment
Share on other sites

Shouldn't there be a space character in the last line before "Then $Callback = Execute($Callback)"

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

qwert, change this part in BinaryCall

If $HasMemoryDll Then
                Local $Module = Execute('__MemoryModule_ModuleRecord("get", Null, $DllName)')
                If $Module Then
                    Local $MemoryGetProcAddress = Execute('__MemoryModule_RuntimeLoader("MemoryGetProcAddress")')
                    If $MemoryGetProcAddress Then $Proc = DllCallAddress("ptr:cdecl", $MemoryGetProcAddress, "ptr", $Module, "str", $ProcName)[0]
                    If Not $Proc Then Return SetError(2, _BinaryCall_LastError("MemoryGetProcAddress failed on " & $ProcName), False)
                EndIf
            EndIf

 

Follow the link to my code contribution ( and other things too ).
FAQ - Please Read Before Posting.
autoit_scripter_blue_userbar.png

Link to comment
Share on other sites

What, then, would be an appropriate write statement?  I guess I'm asking where is the content for a download and what format is it?

Sorry to be so persistent, but this is all brand new to me and I'm trying to get a handle on its use.

Link to comment
Share on other sites

What, then, would be an appropriate write statement?  I guess I'm asking where is the content for a download and what format is it?

Sorry to be so persistent, but this is all brand new to me and I'm trying to get a handle on its use.

​is plain text. reading the code you could do:

Func MyCallback($Obj)
    Local $Data = Json_ObjGet($Obj, "Data")
    Local $EffectiveUrl = Json_ObjGet($Obj, "EffectiveUrl")
    ConsoleWrite('--- '&$Data&' ---'&@LF) ; <--- to see the downloaded data
    ConsoleWrite("Callback: " & $EffectiveUrl & " download size: " & StringLen($Data) & @LF)
EndFunc

Unfortunately not everything we find here is for just copy, paste and shine. Read the code. After 700+ posts you should know how.

Ward, thanks for sharing, great code.

Edited by argumentum

Follow the link to my code contribution ( and other things too ).
FAQ - Please Read Before Posting.
autoit_scripter_blue_userbar.png

Link to comment
Share on other sites

  • 2 months later...

Thank you very much for such a great UDF. I am just trying to use it

#Include "Json.au3"
#Include "Curl.au3"
#Include "Request.au3"

Local $Backup = RequestDefault('{agent: "Autoit/Request", cookiefile: "cookie.txt", cookiejar: "cookie.txt", }')
Local $Data = Request('http://www.w3schools.com/html/html_forms.asp')
Local $Post
Json_Put($Post, ".firstname", "intro")
Json_Put($Post, ".lastname", "intro")
    Local $Obj = Request('{url: "http://www.w3schools.com/html/action_page.php", returnobj: true}', $Post)
FileWrite (@DesktopDir & "\3.txt", $Obj)

What am I doing wrong in this code? It returns nothing

Great thanx in advance!

Link to comment
Share on other sites

  • 2 months later...

 I needed PUT request for my REST application, so I quickly added CUSTOM_REQUEST support.

See cURL MAN page - -X, --request <command>

 

11c11
< ;   Request($Request, $Post = Null)
---
> ;   Request($Request, $Post = Null, $CustomRequest = Null)
108c108
< Func Request($Request, $Post = Null)
---
> Func Request($Request, $Post = Null, $CustomRequest = Null)
179a180,181
>     If Not IsKeyword($CustomRequest) Then Json_ObjPut($OptList, "customrequest", $CustomRequest)
> 
311a314
>     If Json_ObjExists($Obj, "customrequest") Then Curl_Easy_Setopt($Curl, $CURLOPT_CUSTOMREQUEST, Json_ObjGet($Obj, "customrequest"))
320a324
> 

 PATCH 

Request.au3

Edited by recmund
Link to comment
Share on other sites

  • 3 weeks later...
  • 1 month later...

 I needed PUT request for my REST application, so I quickly added CUSTOM_REQUEST support.

See cURL MAN page - -X, --request <command>

 

11c11
< ;   Request($Request, $Post = Null)
---
> ;   Request($Request, $Post = Null, $CustomRequest = Null)
108c108
< Func Request($Request, $Post = Null)
---
> Func Request($Request, $Post = Null, $CustomRequest = Null)
179a180,181
>     If Not IsKeyword($CustomRequest) Then Json_ObjPut($OptList, "customrequest", $CustomRequest)
> 
311a314
>     If Json_ObjExists($Obj, "customrequest") Then Curl_Easy_Setopt($Curl, $CURLOPT_CUSTOMREQUEST, Json_ObjGet($Obj, "customrequest"))
320a324
>

 PATCH 

Request.au3

Do you have request.au3 which include cUrl.au3 and json.au3 or where i can download it :(

thanks

Link to comment
Share on other sites

ok, here they are, from my PC, in Curl there is a folder "changed by argumentum" and you may need the file from there if BinaryCall gives you trouble.As soon as the files are back, I'll remove this post and attached files.

Request(2015.06.07).zip

Curl(2015.06.04).zip

Json(2015.01.08).zip

I want to implement curl like that. How can i put a header to curl :(. 

 

Edited by fairylovehn127
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...