Enviar arq json como form-data usando MSXML

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

Enviar arq json como form-data usando MSXML

Mensagem por gilbertosilverio »

Ola Amigos,

Como faço para enviar um arquivo json em form-data pelo MSXML, e possivel?

Passaram esse documentação, mais nao sei como fazer.
curl
--location "https://datareception.solutions.iqvia.c ... ut1/upload" \
--header "Content-Type: multipart/form-data" \
--header "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9[...]" \
--form =@"C:\file.json" -v

Tentei assim, mais da erro

Código: Selecionar todos

   oHttps:= win_OleCreateObject( "MSXML2.SERVERXMLHTTP.6.0" )

   cURL:= 'https://datareception.solutions.iqvia.com/api/v1/layout1/upload'

   oHttps:Open( "POST" , cURL, .F. )

   oHttps:SetRequestHeader( "Content-Type",    "text/json" )
   oHttps:SetRequestHeader( "Host",            "https://datareception.solutions.iqvia.com" )
   oHttps:SetRequestHeader( "Authorization",   cENTRA     )

   TRY
      oHttps:send(cJson)
      oHttps:WaitForResponse( 50000 )
   CATCH
      HWG_MSGSTOP([Erro de comunicacao, por favor verifique...],[Aviso do sistema])
      RETURN NIL
   END

   hwg_msginfo([1 ]+str(oHttps:readyState))
   hwg_msginfo([2 ]+str(oHttps:Status))
   hwg_msginfo([3 ]+oHttps:StatusText)

   IF oHttps:status <> 200 // diferente de aprovado
      hwg_MsgStop( Alltrim(Str(oHttps:status)) +" - "+ Alltrim(oHttps:ResponseText) , "Erro na requisição")
   ENDIF

   oHttps:=nil

Agradeço a ajuda...
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

Enviar arq json como form-data usando MSXML

Mensagem por gilbertosilverio »

Ola Amigos,

Consegui enviar via Soapui, mais nao consigo enviar via MSXML...

No soapui, fica assim, como devo parametrizar para conseguir enviar.

Nao consigo entender como anexar, como o soap faz via attachamnet

Tentei dessa maneira, mais não vai.

Código: Selecionar todos

   cTXT:='c:\json_teste.zip'

   oHttps:= win_OleCreateObject( "MSXML2.SERVERXMLHTTP.6.0" )

   cURL:= 'https://datareception.solutions.iqvia.com/api/v1/layout1/upload?file1=file%3Ajson_teste.zip'

   oHttps:Open( "POST" , cURL, .F. )

   oHttps:SetRequestHeader( "Accept-Encoding", [gzip,deflate] )
   oHttps:SetRequestHeader( "Authorization",   cENTRA     )
   oHttps:SetRequestHeader( "Content-Type" ,   [multipart/form-data; boundary="----=_Part_0_81802232.1719254354119"] )
   oHttps:SetRequestHeader( "Host",            [https://datareception.solutions.iqvia.com] )

   TRY
      oHttps:send(cTXT)
      oHttps:WaitForResponse( 50000 )
   CATCH
      oBAR:CLOSE()
      HWG_MSGSTOP([Erro de comunicacao, por favor verifique...],[Aviso do sistema])
      RETURN NIL
   END


Algum dica?
Anexos
t2.png
t1.png
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
toninhofwi
Usuário Nível 1
Usuário Nível 1
Mensagens: 31
Registrado em: 23 Set 2009 22:35
Localização: Catanduva-SP

Enviar arq json como form-data usando MSXML

Mensagem por toninhofwi »

eu uso a chilkat pra isso, você pode gerar o curl foxpro e adaptar o resultado pro harbour o que é muito simples:

https://tools.chilkat.io/curlHttp.cshtml#generatedCode


---cut---

LOCAL loHttp
LOCAL lnSuccess
LOCAL loReq
LOCAL loResp

* This example assumes the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.

loHttp = CreateObject('Chilkat_9_5_0.Http')

loReq = CreateObject('Chilkat_9_5_0.HttpRequest')
loReq.HttpVerb = "POST"
loReq.Path = "/api/v1/layout1/upload"
loReq.ContentType = "multipart/form-data"
loReq.AddParam("","")

loReq.AddHeader("Authorization","Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9[...]")

loResp = loHttp.SynchronousRequest("datareception.solutions.iqvia.com",443,1,loReq)
IF (loHttp.LastMethodSuccess = 0) THEN
? loHttp.LastErrorText
RELEASE loHttp
RELEASE loReq
CANCEL
ENDIF

? STR(loResp.StatusCode)
? loResp.BodyStr
RELEASE loResp

RELEASE loHttp
RELEASE loReq
Responder