Página 1 de 1

Web service

Publicado: Jue Ago 26, 2021 11:20 pm
por cfuentes
Buenas tardes estimados, estoy trabajando en un web service, pero al enviar el POST se esta redirigiendo a un sitio no deseado y quiero redireccionarlo, hacer un Redirect o un folowredirect a Falso y no he tenido exito. Alguien sabe como poner el Falso la option Redirect? Alguna recomendacion, por favor.

Gracias anticipadas, a continuacion el codigo utilizado:

cProducts += ']'
cBody := '{"products":' + cProducts + ','
cBody += '"external_verifications":[{"type":"NATIONAL_IDENTITY_CARD","value":"' + '' + aResponseText["patient_document_number"] + '"}], "currency_code":"DOP"}'
cWebService := "https://sandbox.osigu.com/dispensing/v1/documents/"
cWebService += ::oPreautoriza:Value + "/dispensations"
oHttp := CreateObject( "WinHTTP.WinHttpRequest.5.1" )
//oHttp := CreateObject( "MSXML2.XMLHTTP" )
oHttp:open( "POST", cWebService, .F.)
oHttp:SetRequestHeader("Accept", "application/json")
oHttp:SetRequestHeader("content-type","application/json")
oHttp:SetRequestHeader("authorization", &cToken)

oHttp:Option(6, .F.) // Aqui trato de hacer el Redirect, pero no me funciona

oHttp:send( cBody ) //Buscar como obtener la respuesta del reclamo generado, antes de consumir el location.
oHttp:WaitForResponse()
cResponseText := oHttp:getResponseHeader('Location')


Carlos Fuentes

Re: Web service

Publicado: Vie Ago 27, 2021 4:27 pm
por gabo1
Hola cFuentes
Este ejemplo es del Grupo de usuarios de harbour quizas te pueda ayudar, Saludos!

Código: Seleccionar todo

#include "hbcurl.ch"
#include "common.ch"
#include "fileio.ch"

FUNCTION Main( )
	LOCAL exitStatus
	LOCAL endpointUrl

	LOCAL postData
	LOCAL curlHandle
	LOCAL curlErr
	LOCAL aHeader

	  /* Exit status to return */
	exitStatus := 0
	endpointUrl = "http://wsf.cdyne.com/WeatherWS/Weather.asmx"

	// Parameters for call

	postData := '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:weat="http://ws.cdyne.com/WeatherWS/">'
	postData += '<soapenv:Header/>'
	postData += '<soapenv:Body>'
	postData += '<weat:GetWeatherInformation/>'
	postData += '</soapenv:Body>'
	postData += '</soapenv:Envelope>'

	? postData

	aHeader := {}
	AADD(aHeader,"Accept-Encoding: gzip,deflate" )
	AADD(aHeader,"Content-Type: text/xml;charset=UTF-8" )
	AADD(aHeader,'SOAPAction: "http://ws.cdyne.com/WeatherWS/GetWeatherInformation"' )
	AADD(aHeader,"User-Agent: Jakarta Commons-HttpClient/3.1"  )

  /* Initialise libcurl */
	curl_global_init()

	/* Get a curl handle */
	curlHandle := curl_easy_init()

	IF .NOT. EMPTY(curlHandle)

		/* Specify the Header  data */
		curl_easy_setopt(curlHandle,HB_CURLOPT_HTTPHEADER,  aHeader)
		
		/* Set the endpoint to send the POST to */
		curl_easy_setopt(curlHandle, HB_CURLOPT_URL, endpointUrl);
		
		/* Specify the POST data */
		curl_easy_setopt(curlHandle, HB_CURLOPT_POSTFIELDS, postData);
		/* Execute the POST, response goes to STDOUT */

		curlErr = curl_easy_perform(curlHandle);
		/* Report any errors */

		IF .NOT. EMPTY(curlErr)
			? curl_easy_strerror(curlErr)
		ENDIF
	ELSE
		? "No handle"
	ENDIF
	IF .NOT. EMPTY(curlHandle)
		/* Clean-up libcurl */
		curl_global_cleanup()
	ELSE
		exitStatus = 1
	ENDIF
  /* Return the exit status */

RETURN exitStatus

// ESTE ES OTRO EJEMPLO

------------------------------
#include "hbcurl.ch"
#include "common.ch"
#include "fileio.ch"

function fHttpExecute(cxml)
local endpointUrl,curlHandle,curlErr
local aHeader,chpmserv,cc1

cc1 := ""

cservice := "InformationsService"
caction := "LiefereKernversion"
chpmserv := "localhost"
endpointUrl = "http://"+chpmserv+":22220/"+cservice+".asmx"

aHeader := {}
AADD(aHeader,"Accept-Encoding: gzip,deflate" )
AADD(aHeader,"Content-Type: application/soap+xml;charset=UTF-8")
AADD(aHeader,'action="http://some-website.de/'+caction+'"')
        
curlHandle := curl_easy_init()

if !empty(curlHandle)

/* Specify the Header  data */
curl_easy_setopt(curlHandle,HB_CURLOPT_HTTPHEADER,aHeader)

/* Set the endpoint to send the POST to */
curl_easy_setopt(curlHandle, HB_CURLOPT_URL, endpointUrl)

/* Setup response data */
curl_easy_setopt( curlHandle, HB_CURLOPT_DOWNLOAD )
curl_easy_setopt( curlHandle, HB_CURLOPT_DL_BUFF_SETUP )

/* Specify the POST data */
curl_easy_setopt(curlHandle, HB_CURLOPT_POST, 1)
curl_easy_setopt(curlHandle, HB_CURLOPT_POSTFIELDS, cxml)

/* Do everything */
curlErr := curl_easy_perform(curlHandle)

/* Report any errors */
if empty(curlErr)
/* store response in variable */
cc1 := curl_easy_dl_buff_get( curlHandle )
else
? curl_easy_strerror(curlErr)
endif
else
? "No handle"
endif

if !empty(curlHandle)
/* Clean-up libcurl */
curl_global_cleanup( curlHandle )
else
? "Error"
endif

if empty(cc1)
? "Error"
endif

return cc1

Re: Web service

Publicado: Vie Ago 27, 2021 9:17 pm
por cfuentes
Gabo, mil gracias por la respuesta, realmente no tengo problemas con el web services, lo he trabajado en este y otros proyectos, pero nunca habia enfrentado el caso de tener que redireccionar, utilizar un Redirect. Aprendi que va de la mano con el CreateObject, pero no he logrado hacer que se ponga en Falso.

Muy agradecido por tu respuesta, me has dado luz para saber que el Forum de Harbour es una opcion, que nunca tenia en cuenta.

Gracias, un abrazo

Carlos Fuentes