webservice desde FWH

webservice desde FWH

Postby rterraz » Sat May 12, 2012 4:53 pm

Estimados amigos
Necesito acceder a un Webservice desde una aplicacion de FWH usando la WinInet.dll
El webservice solicita varios datos que deben ser pasados como parametros, un User y un Password,he probado de varias maneras y no logro hacerlo funcionar!
He usado un ejemplo que encontre en el foro que es para consultar el correo de Brasil que anda ,pero se entra en forma anonima,el codigo esta abajo.
El problema es que paso los parametros pero no se como pasar el User y Password usando estas funciones!

Alguien sabria como hacerlo?
Agradeceria cualquier ayuda al respecto

// websrvce.prg

#include "fivewin.ch"
#include "dll.ch"

static xDLL,oGet,oSay,oDlg

//............................................................
Function Main()
local oGet[4], oFont
local cCEPorigen:="23902-300",cCEPdestino:="28921-205"
local cPESO:=0 , cTOTAL := 0


DEFINE FONT oFont NAME "ARIAL" SIZE 00,-12 BOLD
SET _3DLOOK ON

DEFINE DIALOG oDlg RESOURCE "Sedex" TITLE "Correios - Sedex"
REDEFINE GET oGet[1] VAR cCEPorigen PICTURE "99999-999" ID 101 OF oDlg
REDEFINE GET oGet[2] VAR cCEPdestino PICTURE "99999-999" ID 102 OF oDlg
REDEFINE GET oGet[3] VAR cPESO PICTURE "999999999" ID 103 OF oDlg
REDEFINE GET oGet[4] VAR cTOTAL PICTURE "@E 99,999.99" ID 104 OF oDlg UPDATE
REDEFINE BUTTON ID 105 OF oDlg ACTION Consulta(cCEP1,cCEP2,cPESO,@cTotal)
REDEFINE SAY oSay ID 106 OF oDlg COLOR nRGB(255,0,0),getsyscolor(15)
ACTIVATE DIALOG oDlg CENTERED

return nil

//.......................................................
Function Consulta(cCepOrigem,cCepDestino,cPeso,cTotal)

local oRs, ws
local cXMLPreco,cXMLErros,cXMLSedex
local cUser:="usuario"
local sPass:="password"

ws := TdWebService():new()
oSay:SetText( "Aguarde, consultando la base de datos" )


cXMLSedex := ws:OpenWS( "http://www.correios.com.br/encomendas/precos/calculo.cfm?" +;
"&cepOrigem:="+cCepOrigem+;
"&cepDestino:="+cCepDestino+;
"&peso:="+alltrim(str(cPeso))+;
"&resposta:=xml" )

/*
Se invoca el URL del webservice y se le pasan los parametros requeridos por el mismo y responde pero en el WS al que quiero acceder
es necesario agregar Usuario y Password y no se como pasarlos
Ademas el URL es htpps://www.miwebservice.... en lugar de htpp://www.miwebservice... puede influir esto?
Por ultimo, he visto en otros ejemplos, que luego del signo ? del URL agregan WSDL alguien sabe para que es esto ?

*/

ws:end()
oSay:SetText( "Aguarde, Grabando respuesta" )

MemoWrit( "Sedex.xml", cXMLSedex )
cXMLPreco := XMLGet( "preco_postal", cXMLResp )
cXMLErros := XMLGet( "descricao" , cXMLResp )
cTotal := transf( val( cXMLPreco ), "@E 99,999.99" )

oSay:SetText( iif( empty( cXMLErros ), "Operacion concretada OK!", cXMLErros ) )
oDlg:update()

return nil

//..................................

Function XMLGet( XMLField, XMLFile )

local XMLFieldIni,XMLFieldEnd

XMLField := alltrim( XMLField )
XMLFieldINI := rat( "<"+XMLField+">", XMLFile ) + len( "<"+XMLField+">" )
XMLFieldEND := rat( "</"+XMLField+">", XMLFile ) - XMLFieldINI

return substr( XMLFile, XMLFieldINI, XMLFieldEND )



**************************************
Function inetestaconectada( cAddress )
**************************************
LOCAL aHosts
LOCAL cName
InetInit()
IF cAddress == NIL
cAddress := "www.google.com.ar"
ENDIF
aHosts := InetGetHosts( cAddress )
IF aHosts == NIL .or. len(aHosts)=0
InetCleanup()
RETURN .f.
endif
InetCleanup()
RETURN .t.





// CLASS WEBSERVICE

/*

Classe WebService

*/

CLASS TdWebService
DATA hOpen
DATA sbuffer HIDDEN
DATA xDLL HIDDEN

METHOD New(buffersize) CONSTRUCTOR
METHOD OpenWS(url)
METHOD End()

ENDCLASS

*****************************
METHOD New(conexion,buffersize) CLASS TdWebService
DEFAULT buffersize:=3200
::sbuffer:=buffersize
xDll:=LoadLib32("wininet.dll")
::hOpen = InternetOpen("TdWebService", 1,"testwservice","testwservicepsw", 0)

RETURN Self

*****************************
METHOD OpenWS(url) CLASS TdWebService

local hFile,ret,xml
hFile = InternetOpenUrl(::hOpen, url,"",0,,0)
xml:=space(::sbuffer)
InternetReadFile(hFile, @xml, ::sbuffer, @Ret)
return XML
* return subst(alltrim(xml),1,len(alltrim(xml))-5)

*****************************
METHOD End() CLASS TdWebService
FreeLib32(xDll)
return nil

*****************************

DLL32 FUNCTION InternetOpen( cApp as LPSTR, n1 AS DWORD, n2 AS LPSTR, n3 AS LPSTR,;
n4 AS DWORD ) AS LONG PASCAL ;
FROM "InternetOpenA" LIB xdll
DLL32 Function InternetReadFile(hFile As 7, @sBuffer As 8, lNumBytesToRead As 7, @lNumberOfBytesRead As 7) As 7 PASCAL Lib xdll
DLL32 Function InternetOpenUrl(hInternetSession As 7, lpszUrl As 8, lpszHeaders As 8, dwHeadersLength As 7, dwFlags As 7, dwContext As 7) As 7 FROM "InternetOpenUrlA" PASCAL Lib xdll
DLL32 FUNCTION InternetCloseHandle( hSession AS LONG ) AS BOOL PASCAL LIB xdll
User avatar
rterraz
 
Posts: 182
Joined: Wed Nov 08, 2006 11:44 pm
Location: Argentina

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: richard-service and 67 guests