HTTP Head – Check file existence on a web server
This function use the HEAD method of HTTP 1.0 protocol to check if a file exists on a web server.
ABAP
FUNCTION z_http_head.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(URI) TYPE STRING
*" VALUE(URI_C) TYPE CHAR1024 OPTIONAL
*" EXPORTING
*" VALUE(CONTENT_TYPE) TYPE STRING
*" VALUE(CODE) TYPE I
*" VALUE(REASON) TYPE STRING
*" EXCEPTIONS
*" NO_LOGIN_ACCOUNT_AVAILABLE
*" HTTP_COMMUNICATION_FAILURE
*" HTTP_INVALID_STATE
*" HTTP_PROCESSING_FAILED
*" HTTP_SEND_RECEIVE_ERROR
*" OTHERS
*"----------------------------------------------------------------------
* IperCube 2007
*"----------------------------------------------------------------------
DATA: user TYPE string,
pwd TYPE string,
x_bytes TYPE i.
* Set User/Password Logon to web server
user = 'my_user'.
pwd = 'my_password'.
* Translate URL
TRANSLATE uri USING ' *'.
REPLACE ALL OCCURRENCES OF '*' IN uri WITH '%20' IN CHARACTER MODE.
* Create HTTP_CLIENT object
DATA: client TYPE REF TO if_http_client,
timeout TYPE i VALUE 0.
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = uri
IMPORTING
client = client.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Authentication
CALL METHOD client->authenticate
EXPORTING
* PROXY_AUTHENTICATION = ' '
* CLIENT = sy-mandt
username = user
password = pwd
* LANGUAGE = 'E'
.
* Set Header Fields
CALL METHOD client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'HEAD'.
CALL METHOD client->request->set_header_field
EXPORTING
name = '~server_protocol'
value = 'HTTP/1.0'.
* Send Request via HTTP
CALL METHOD client->send
EXPORTING
timeout = timeout
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.
CASE sy-subrc.
WHEN 1. RAISE http_communication_failure.
WHEN 2. RAISE http_invalid_state.
WHEN 3. RAISE http_processing_failed.
WHEN 4. RAISE http_send_receive_error.
ENDCASE.
* Receive Response via HTTP
CALL METHOD client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.
CASE sy-subrc.
WHEN 1. RAISE http_communication_failure.
WHEN 2. RAISE http_invalid_state.
WHEN 3. RAISE http_processing_failed.
WHEN 4. RAISE http_send_receive_error.
ENDCASE.
* Get Content Type
content_type = client->response->get_header_field( name = 'content-type' ).
* Get Message
CALL METHOD client->response->get_status
IMPORTING
code = code
reason = reason.
* Close connection
CALL METHOD client->close
EXCEPTIONS
http_invalid_state = 1
OTHERS = 2.
CASE sy-subrc.
WHEN 1. RAISE http_invalid_state.
WHEN 2. RAISE others.
ENDCASE.
ENDFUNCTION.