Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

using FM HTTP_POST

Former Member
0 Likes
1,698

Hi,

I want to use the FM HTTP_POST to call an external program. That works fine as long as I do not use the tables REQUEST_ENTITY_BODY and REQUEST_HEADERS.

I must send data to the external program and I want to do this with an XML file.

I send the XML file with the REQUEST_ENTITY_BODY table. But I don’t know what to write in the REQUEST_HEADERS table. I tried it with: 'Content-Type:TEXT/XML; charset=utf-8' but that doesn’t work.

I get the error message in the response_headers table:

“X-errorDescription: Error on line 1 of document : Dokumentwurzelelement fehlt Nested exception: Dokumentwurzelelement fehlt”

Do anybody know what the REQUEST_HEADERS table should contain?

I cannot use the CL_HTTP_CLIENT class because of the release 4.6 C.

Thanks.

Kind Regards,

Michael Schöffer

8 REPLIES 8
Read only

athavanraja
Active Contributor
0 Likes
1,214

welcome to SDN.

if you use request_entity_body you also need to pass the size of the body

request_entity_body_length = size

i guess the request header you are passing is ok.

Regards

Raja

Read only

0 Likes
1,214

Hi Raja,

Do you have any sample ABAP code which shows how to pass an XML Request correctly via HTTP_POST ?

Thanks,

Chris

Read only

Former Member
0 Likes
1,214

Hi Michael,

Did you ever resolve this?

Thank you, Chris

Read only

Former Member
0 Likes
1,214

It's been very long since you had posted this topic. Were you able to resolve this issue? Could you post the details?

Raj

Read only

0 Likes
1,214

I resolve this issue.

DATALT_REQUEST_HEADER  TYPE TABLE OF SBCHEADER WITH HEADER LINE,

        LT_REQUEST_BODY    TYPE TABLE OF SBCBODY WITH HEADER LINE,

        LT_RESPONSE_HEADER TYPE TABLE OF SBCHEADER WITH HEADER LINE,

        LT_RESPONSE_BODY   TYPE TABLE OF SBCBODY WITH HEADER LINE.

APPEND 'Content-Type: text/xml; charset=UTF-8' TO LT_REQUEST_HEADER.


APPEND '<?xml version="1.0" encoding="euc-kr"?>' TO LT_REQUEST_BODY.

APPEND '<root>                                                             ' TO LT_REQUEST_BODY.

APPEND '<params>                                                           ' TO LT_REQUEST_BODY.

* (...blablabla...xml data string...)


* just call

CALL FUNCTION 'HTTP_POST'

   EXPORTING

     ABSOLUTE_URI                = URI   " url...

     REQUEST_ENTITY_BODY_LENGTH  = LV_LEN   " blank variable.

     RFC_DESTINATION             = 'SAPHTTP'

*   PROXY                       =

*   PROXY_USER                  =

*   PROXY_PASSWORD              =

*   USER                        =

*   PASSWORD                    =

     BLANKSTOCRLF                = 'X'

   IMPORTING

     STATUS_CODE                 = STATUS_CODE

     STATUS_TEXT                 = STATUS_TEXT

     RESPONSE_ENTITY_BODY_LENGTH = LV_LEN

   TABLES

     REQUEST_ENTITY_BODY         = LT_REQUEST_BODY

     RESPONSE_ENTITY_BODY        = LT_RESPONSE_BODY

     RESPONSE_HEADERS            = LT_RESPONSE_HEADER

     REQUEST_HEADERS             = LT_REQUEST_HEADER.

WRITE / 'THE HEADER DATA '.

LOOP AT LT_RESPONSE_HEADER.

   WRITE:/ LT_RESPONSE_HEADER.

ENDLOOP.

WRITE:/ 'THE BODY DATA : ' .

LOOP AT LT_RESPONSE_BODY.

   WRITE:/ LT_RESPONSE_BODY.

ENDLOOP.



When test program, use http monitoring tool(HTTP Analyzer...and so on...) and check http packit header.

Read only

0 Likes
1,214

Chan-Seok Jeon, do you have examples of structures/syntax for the parameters that you append to LT_REQUEST_BODY? I have been searching for this information and cannot find it anywhere. I have a web service that i need to pass parameters and nothing i do is working. Any examples would help, as i cannot find anything for this. i assumed that i would just send the xml data, but that is not working. i continue to get errors.

thanks,

Erik Thiessen

Read only

0 Likes
1,214

This is my full source~

*----------------------------------------------------------------------*

*  Report  ZEONC_HTTP_POST

*

*----------------------------------------------------------------------*

*

*

*----------------------------------------------------------------------*

REPORT ZEONC_HTTP_POST.

PARAMETERS : P_URI(100) LOWER CASE DEFAULT

                   'http://xxx.com/dwgNew/Mi_cutDwgDown.jsp'.

* HTTP POST

DATA : LV_STATUS_CODE(5),

       LV_STATUS_TEXT(300),

       LV_LEN              TYPE          I,

       LV_PARAMS           TYPE          STRING,

       LT_REQ_HEAD         TYPE TABLE OF SBCHEADER WITH HEADER LINE,

       LT_REQ_BODY         TYPE TABLE OF SBCBODY WITH HEADER LINE,

       LT_RES_HEAD         TYPE TABLE OF SBCHEADER WITH HEADER LINE,

       LT_RES_BODY         TYPE TABLE OF SBCBODY WITH HEADER LINE.

* XML Parsing

DATA : LV_XML     TYPE        STRING,

       LO_NODE    TYPE REF TO IF_IXML_NODE,

       LV_VALUE   TYPE        STRING,

       LO_XML_DOC TYPE REF TO CL_XML_DOCUMENT.

* ETC.

DATA : LV_URL TYPE BXMNODES-URL.

* Set Header

APPEND 'Content-Type: text/xml; charset=euc-kr' TO LT_REQ_HEAD.

* Set Parameter

APPEND '<?xml version="1.0" encoding="euc-kr"?>             ' TO LT_REQ_BODY.

APPEND '<root>                                              ' TO LT_REQ_BODY.

APPEND '<params>                                            ' TO LT_REQ_BODY.

APPEND '<param id="admMode" type="STRING">Y</param>         ' TO LT_REQ_BODY.

APPEND '<param id="block" type="STRING">A23</param>         ' TO LT_REQ_BODY.

APPEND '<param id="gubun" type="STRING">lot</param>         ' TO LT_REQ_BODY.

APPEND '<param id="ocomp" type="STRING"></param>            ' TO LT_REQ_BODY.

APPEND '<param id="path" type="STRING"></param>             ' TO LT_REQ_BODY.

APPEND '<param id="shipno" type="STRING">S630</param>       ' TO LT_REQ_BODY.

APPEND '<param id="userid" type="STRING">AAAAAAAAAA</param> ' TO LT_REQ_BODY.

APPEND '<param id="plate" type="STRING">Y</param>           ' TO LT_REQ_BODY.

APPEND '<param id="print_view" type="STRING">V</param>      ' TO LT_REQ_BODY.

APPEND '</params>                                           ' TO LT_REQ_BODY.

APPEND '<dataset id="ds_input">                             ' TO LT_REQ_BODY.

APPEND '<colinfo id="chk" size="1" type="STRING"/>          ' TO LT_REQ_BODY.

APPEND '<colinfo id="dwgno" size="2" type="STRING"/>        ' TO LT_REQ_BODY.

APPEND '<colinfo id="fab" size="3" type="STRING"/>          ' TO LT_REQ_BODY.

APPEND '<colinfo id="filechk" size="3" type="STRING"/>      ' TO LT_REQ_BODY.

APPEND '<colinfo id="filename" size="30" type="STRING"/>    ' TO LT_REQ_BODY.

APPEND '<colinfo id="grp" size="1" type="STRING"/>          ' TO LT_REQ_BODY.

APPEND '<colinfo id="lot" size="3" type="STRING"/>          ' TO LT_REQ_BODY.

APPEND '<colinfo id="revno" size="3" type="STRING"/>        ' TO LT_REQ_BODY.

APPEND '<colinfo id="ship" size="5" type="STRING"/>         ' TO LT_REQ_BODY.

APPEND '<record>                                            ' TO LT_REQ_BODY.

APPEND '<chk>1</chk>                                        ' TO LT_REQ_BODY.

APPEND '<dwgno>01</dwgno>                                   ' TO LT_REQ_BODY.

APPEND '<fab>COM</fab>                                      ' TO LT_REQ_BODY.

APPEND '<filechk>Oilechk>                                   ' TO LT_REQ_BODY.

APPEND '<filename>XXXXXXXXXXXXX.XXX</filename>              ' TO LT_REQ_BODY.

APPEND '<grp>4L</grp>                                       ' TO LT_REQ_BODY.

APPEND '<lot>A23</lot>                                      ' TO LT_REQ_BODY.

APPEND '<revno>0</revno>                                    ' TO LT_REQ_BODY.

APPEND '<ship>S630</ship>                                   ' TO LT_REQ_BODY.

APPEND '</record>                                           ' TO LT_REQ_BODY.

APPEND '</dataset>                                          ' TO LT_REQ_BODY.

APPEND '</root>                                             ' TO LT_REQ_BODY.

* Send Post **********************************************************

CALL FUNCTION 'HTTP_POST'

  EXPORTING

    ABSOLUTE_URI                = P_URI

    REQUEST_ENTITY_BODY_LENGTH  = LV_LEN

    RFC_DESTINATION             = 'SAPHTTP'

*   PROXY                       =

*   PROXY_USER                  =

*   PROXY_PASSWORD              =

*   USER                        =

*   PASSWORD                    =

    BLANKSTOCRLF                = 'X'

  IMPORTING

    STATUS_CODE                 = LV_STATUS_CODE

    STATUS_TEXT                 = LV_STATUS_TEXT

    RESPONSE_ENTITY_BODY_LENGTH = LV_LEN

  TABLES

    REQUEST_ENTITY_BODY         = LT_REQ_BODY

    RESPONSE_ENTITY_BODY        = LT_RES_BODY

    RESPONSE_HEADERS            = LT_RES_HEAD

    REQUEST_HEADERS             = LT_REQ_HEAD

  EXCEPTIONS

    CONNECT_FAILED              = 1

    TIMEOUT                     = 2

    INTERNAL_ERROR              = 3

    TCPIP_ERROR                 = 4

    SYSTEM_FAILURE              = 5

    COMMUNICATION_FAILURE       = 6

    OTHERS                      = 7.

* Check result

IF LV_STATUS_CODE NE '200'. " Failure

  WRITE : / 'STATUS CODE :' , 15 LV_STATUS_CODE.

  WRITE : / 'STATUS TEXT :' , 15 LV_STATUS_TEXT , /.

  WRITE : / 'RESPONSE HEADER : '.

  LOOP AT LT_RES_HEAD.

    WRITE /3 LT_RES_HEAD.

  ENDLOOP.

  WRITE : /, / 'RESPONSE BODY : '.

  LOOP AT LT_RES_BODY.

    WRITE /3 LT_RES_BODY.

  ENDLOOP.

  EXIT.

ENDIF.

* Parsing XML Return Value

CLEAR : LV_XML.

LOOP AT LT_RES_BODY.

  CONCATENATE LV_XML LT_RES_BODY INTO LV_XML.

ENDLOOP.

CREATE OBJECT LO_XML_DOC.

LO_XML_DOC->PARSE_STRING( STREAM = LV_XML ).

LO_NODE  = LO_XML_DOC->FIND_NODE( NAME = 'iis_url' ).

LV_VALUE = LO_XML_DOC->GET_NODE_VALUE( NODE = LO_NODE ).

LV_URL = LV_VALUE.

CALL FUNCTION 'PRGN_GENER_EXECUTE_URL'

  EXPORTING

    NODE_DATA = LV_URL.

Read only

0 Likes
1,214

Thank you very much. This is now working correctly. I would like to give you points but i am not allowed in the thread as it is already answered. but if it means anything, THANKS!!!! I do appreciate it.