首页 > 其他分享 >URL有空格,浏览器能打开、cl_http_utility无法打开

URL有空格,浏览器能打开、cl_http_utility无法打开

时间:2024-03-29 15:58:05浏览次数:25  
标签:空格 20 cl URL lv url http 打开

解决过程

1、cl_http_utility打开URL失败原因是URL地址有空格,考虑到有空格直接去掉(CONDENSE l_str NO-GAPS),结果去掉之后URL打开是一推乱码 失败告终!

2、既然浏览器能打开看看浏览器打开的时候空格转换成什么通用字符,浏览器直接把空格转换成%20,于是在程序debug里面把空格改成%20结果成功了!!

从度娘上找到URL相关转义字符:

+    URL 中+号表示空格                      %2B
空格  URL中的空格可以用+号或者编码           %20
/   分隔目录和子目录                        %2F
?    分隔实际的URL和参数                    %3F
%    指定特殊字符                           %25
#    表示书签                               %23
&     URL 中指定的参数间的分隔符             %26
=     URL 中指定参数的值                     %3D

接下来把URL空格替换成%20过程

1、直接REPLACE ALL OCCURRENCES OF REGEX   '  '  IN url WITH '%20'. 失败!! 直接dump,替换不支持空格替换成别的字符,只能把别的字符替换成空格。

2、度娘查到translate函数可以空格替换 url = translate( val = url from = ` ` to = `%20` ).结果只能替换一个字符

 失败告终!

3、成功方案先用translate替换成别的字符,然后再用REPLACE替换

REPORT ztest_ma01.

DATA: lv_string TYPE string VALUE '这 是 一 个 测 试 字 符 串'.

lv_string = translate( val = lv_string from = ` ` to = `~` ).

REPLACE ALL OCCURRENCES OF REGEX   '~'  IN lv_string WITH '%20'.

WRITE: / lv_string.

成功源代码:


url = translate( val = url from = ` ` to = `~` ).
REPLACE ALL OCCURRENCES OF REGEX   '~'  IN url WITH '%20'.

  lv_url = url..
* 必输
  IF lv_url IS INITIAL.
    code = 'F'.
    msg  = '文件地址必输'.
    RETURN.
  ENDIF.
* 检查地址格式
*  TRANSLATE lv_url TO LOWER CASE.
  l_pat = '^(((http|https|file)(:\/\/)).*)+$'.
  CREATE OBJECT lv_reg EXPORTING pattern = l_pat.
  CALL METHOD cl_http_utility=>if_http_utility~is_valid_url
    EXPORTING
      url           = lv_url
      white_pattern = lv_reg
      restrictive   = abap_true
    RECEIVING
      is_ok         = lv_ok.
  IF lv_ok IS INITIAL..
    code = 'F'.
    msg  = '无效的url地址信息'.
    RETURN.
  ENDIF.

通过URL下载文件代码:

  lv_url = url..
* 必输
  IF lv_url IS INITIAL.
    code = 'F'.
    msg  = '文件地址必输'.
    RETURN.
  ENDIF.
* 检查地址格式
*  TRANSLATE lv_url TO LOWER CASE.
  l_pat = '^(((http|https|file)(:\/\/)).*)+$'.
  CREATE OBJECT lv_reg EXPORTING pattern = l_pat.
  CALL METHOD cl_http_utility=>if_http_utility~is_valid_url
    EXPORTING
      url           = lv_url
      white_pattern = lv_reg
      restrictive   = abap_true
    RECEIVING
      is_ok         = lv_ok.
  IF lv_ok IS INITIAL..
    code = 'F'.
    msg  = '无效的url地址信息'.
    RETURN.
  ENDIF.

*  TRANSLATE lv_url TO LOWER CASE .
*  TRANSLATE filelx TO LOWER CASE.
  IF '.png,.jpg,.gif,.pdf'
   CS filelx AND filelx IS NOT INITIAL .
    CONCATENATE lv_url '?isLoad=1' INTO url.
  ENDIF.
  CALL FUNCTION 'CALL_BROWSER'
    EXPORTING
      url                    = url
    EXCEPTIONS
      frontend_not_supported = 1
      frontend_error         = 2
      prog_not_found         = 3
      no_batch               = 4
      unspecified_error      = 5
      OTHERS                 = 6.
  IF sy-subrc <> 0.
    code = 'F'.
    msg  = '无效的文件地址'.
  ENDIF.

标签:空格,20,cl,URL,lv,url,http,打开
From: https://blog.csdn.net/ma_edu/article/details/137131326

相关文章

  • Java企业电子招投标系统源代码,支持二次开发,采用Spring cloud框架
    在数字化采购领域,企业需要一个高效、透明和规范的管理系统。通过采用SpringCloud、SpringBoot2、Mybatis等先进技术,我们打造了全过程数字化采购管理平台。该平台具备内外协同的能力,通过待办消息、招标公告、中标公告和信息发布等功能模块,实现了对供应商的集中管理和风险控制......
  • 【RedHat9.0】Linux中命令行界面nmcli工具——网络连接失败,解决网卡状态unmanaged实例
    问题:网络接口处于unmanaged状态,网络不可达连接失败参考IP地址网络配置的五种方法文章配置网络。在Settings没有Wired有线网络设置键,右上角也没有结构图标识:按照配置网络时的启动命令:报错!!!错误:连接激活失败:未找到适合此连接的设备(设备不可用,因为设备严格不受管理)。......
  • Linux系统使用nmcli命令配置网络(永久有效)
        前言:原文在我的博客网站中,持续更新数通、系统方面的知识,欢迎来访!使用nmcli命令配置网络https://myweb.myskillstree.cn/88.html       目录1、配置Network-Manager接管网络(Ubuntu需要,Centos不需要)2、nmcli的相关配置使用nmcli添加一个网卡并配置静态i......
  • H5网页调用APP原生分享菜单 方法:mcloudshare://advert?imgUrl=图标链接&link=分享的链
    要在H5网页中调用APP原生的分享菜单,你可以通过以下步骤实现:创建分享按钮或触发分享的交互元素,例如一个按钮或链接。在按钮的点击事件处理程序中,使用JavaScript生成一个调用APP分享功能的URL。根据你提供的信息,生成的URL格式如下:mcloudshare://advert?imgUrl=图......
  • Oracle中表空间查询
    1、查看表占的空间SELECTt.segment_name,round(SUM(t.bytes/1024/1024/1024),2)FROMuser_segmentstGROUPBYt.segment_nameORDERBYSUM(t.bytes/1024/1024/1024)DESC2、查看表空间使用率(包含临时表空间)SELECT*FROM(SELECTA.TABLESPACE_NAME,ROUND(A.BY......
  • teamcenter中 import com.teamcenter.rac.commonclient.date.DateComponent;的使用
     渲染:Datedate=null; TCPropertyDescriptordescriptor=property.getDescriptor(); Stringpropertyname=descriptor.getName(); if("EOL_Date".equals(propertyname)){// DateComponenta=newDateComponent(); date=property.getDateVa......
  • 自定义的基于System.Net.Http.HttpClient的WebClient,可以作为微信支付宝的发起请求时
    个人编写的,自己用于自己的微信api的请求的实现当中,源码公开,大家可以查看反编译源码。以下是使用方法:第一步搜索和安装zmjtool第二步发起请求1/**引入命名空间*/2usingZmjTool;34/**发起Get请求*/5using(varcl=newZmjTool.WebClient())6{7cl.......
  • Android studio打开Device File Explore(文件管理器)的方法
    方法View>ToolWindows>AndroidProfiler   AndroidStudio对文件的读写操作,可以看这里的文件,data是我自己取的名字,你们对应打开的文件名字不一样是正常的 下课!!......
  • SpringCloud 和 Dubbo 区别: 比较微服务框架的差异
    1.1SpringCloud简介SpringCloud是一个用于构建云原生应用的框架集合,它为开发者提供了一套完整的工具链,用于快速搭建分布式系统。SpringCloud基于 SpringBoot 开发,具有如下特点:提供了丰富的组件,如配置管理、服务注册与发现、断路器等采用声明式的编程模型,易于上手与Spr......
  • Oracle查询数据库万能SQL
    Oracle数据库表简要说明数据库表描述USER开头的只能查询自身用户的表DBA开头的最高权限,只能用sys、system用户才能查询CDB开头的ContainerDatabase数据库容器,ORACLE12版本引入ALL开头的sys、system、普通用户都能查查询数据库表--查询数据......