May 09, 2024, 07:08:30 AM

News:

IonicWind Snippit Manager 2.xx Released!  Install it on a memory stick and take it with you!  With or without IWBasic!


How to do a GET or POST request without the browser?

Started by tekrat, June 02, 2008, 05:53:34 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

tekrat

Hey everyone,

I'm working on putting together a simple commandline utility post to my Twitter account.  Does anyone have an API to do a GET and/or POST request?  I know I can use the ATTACHBROWSER but I was worried about the overhead this may generate for CLI.

Thanks in advance.

tekrat

I have a partially working solution.  Below is some code to do an HTTP GET from a webserver I pulled from some IBasic code I foud and revised.  The only problem I have is that I can't get function to return a WSTRING, only a STRING.  Since its returning a string part of the page is getting cut off.  Any advice?


'Generic HTTP GET function based on Time update program
'created by: Jos de Jong, 2004
'created with: IBasic Professional

$main
$USE "wininet.lib"

'declare some API calls
SETID "INTERNET_SERVICE_FTP",1
SETID "INTERNET_SERVICE_GOPHER",2
SETID "INTERNET_SERVICE_HTTP",3

SETID "INTERNET_PRECONFIG",0
SETID "INTERNET_DIRECT",1
SETID "INTERNET_PROXY",3
SETID "INTERNET_FLAG_RELOAD",0x80000000

DECLARE "wininet",InternetOpenA(agent:string,access:int,proxyname:string,proxybypass:string,flags:int),int
DECLARE "wininet",InternetConnectA(session:int,server:string,port:word,username:string,pass:string,service:int,flags:int,context:int),int
DECLARE "wininet",InternetCloseHandle(handle:int),int
DECLARE "wininet",HttpOpenRequestA(session:int,verb:string,name:string,version:pointer,referer:string,types:pointer,flags:int,context:int),int
DECLARE "wininet",HttpSendRequestA(handle:int,headers:pointer,headerlength:int,option:pointer,optionlength:int),int
DECLARE "wininet",InternetReadFile(hfile:int,buffer:string,count:int,bytesread:pointer),int
DECLARE "wininet",InternetQueryDataAvailable(hfile:int,bytesavail:pointer,flags:int,context:int),int

sub OpenUrl(site$:string, doc$:string),STRING  ' When set to WSTRING, it always errors

DEF hopen,hconnect,hhttp:int
DEF buffer as WSTRING
DEF br,avail:int
DEF null:POINTER
DEF content as STRING


'if the url you want is "http://www.timeanddate.com/worldclock/index.html", then
'site$ must be "www.timeanddate.com"
'doc$ must be "worldclock/index.html"
'the doc$ refers to the actual document, directory or page being retrieved.

ref$ = "IBasic Pro"
content$ = ""

hopen = InternetOpenA(ref$,@INTERNET_PRECONFIG,"","",0)
IF hopen

hconnect = InternetConnectA(hopen,site$,80,"","",@INTERNET_SERVICE_HTTP,0,0)
IF hconnect

hhttp = HttpOpenRequestA(hconnect,"GET",doc$,null,"",null,@INTERNET_FLAG_RELOAD,0)

IF hhttp

IF HttpSendRequestA(hhttp,null,0,null,0)

DO
InternetReadFile(hhttp,buffer,255,br)
IF br > 0
buffer$ = left$(buffer,br)
content$ = content$ + buffer$
ENDIF

buffer$ = ""

UNTIL br = 0
ENDIF
InternetCloseHandle(hhttp)

ENDIF
InternetCloseHandle(hconnect)

ENDIF

InternetCloseHandle(hopen)

ENDIF

return content$
endsub

print OpenURL("www.google.com", "/")
input ""

Earn

Tekrat
I don't think your problem is with unicode strings.  Your not getting the entire page content because your content buffer is full.  Try changing "DEF content as STRING" to "DEF content[10000] as iSTRING" and you'll see what I mean.
Earn


Denzil Newman

nice contrib too tekrat, that should save me some of the effort of porting my VB code to do exactly that!