Web Services 401使用cl_http_client获取文件时出错

m0rkklqb  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(231)

我尝试使用Sharepoint Rest API从SAP服务器访问Sharepoint,但即使Sharpoint用户拥有所有所需的授权,我也会收到401错误:

lv_service = 'MYURL/_api/web/lists/GetByTitle(''Ressource'')/items'.

cl_http_client=>create_by_url(
    EXPORTING
      url                = lv_service
    IMPORTING
      client             = lo_http_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4 ).

lo_http_client->authenticate(
    EXPORTING
      username             =   'usr'  " ABAP System, User Logon Name"
      password             =   'password'  ).

lo_http_client->send(
  EXCEPTIONS
   http_communication_failure = 1
   http_invalid_state         = 2 ).

lo_http_client->receive(
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3 ).

在接收方法中,I Get 401错误:

lv_result = lo_http_client->response->get_data( ).

如何解决此问题?

oiopk7p5

oiopk7p51#

检查http客户端是否正确设置为PUT或GET
我认为这里需要GET。
然后下一个问题是你是否在sharepoint上生成了用于外部访问的链接。在浏览器中打开dev模式测试该url,这样你就可以看到发生了什么。一旦你对链接访问中没有重定向等感到满意,就用更多的调试再试一次。
在代码中,可以在尝试添加身份验证头之后调试lo_http_client。

lo_http_client->Request->get_Header_fields.

您也可以调试所有信息返回Philipp建议。
您还可以检查SMICM日志以查看是否记录了任何http错误。是否记录了SSL错误?
我会先把文件放在一个非认证的公共区域。当作品把文件放在一个非公共的文件夹中,然后再尝试认证。
你可以使用众多免费测试工具中的一个来构建基本的URL调用。在线工具,浏览器插件,下载应用程序。无论什么。确保你知道什么流量工作。ABAP中的原型开发很慢...
我也使用匿名SSL进行此类调用。

cl_http_client=>create_by_url(
     EXPORTING
       url                =  l_url
       ssl_id             = 'ANONYM'
     IMPORTING
       client             =  lo_http_client
     EXCEPTIONS
       argument_not_found = 1
       plugin_not_active  = 2
       internal_error     = 3
       OTHERS             = 4
   ).

如果你不知道如何分析,这里有太多的事情可能会出错。这可能需要一段时间。
其他一些想法......与401错误无关,但可能会派上用场,比如将接受的内容类型或调用方法类型设置为GET

lo_http_client->request->set_header_field(
                                    name  = 'Accept'
                                    value = 'application/json, text/plain, */*').

  lo_http_client->request->set_method(  method = cl_http_entity=>co_request_method_get ).

相关问题