HTTP/1.1 401 在 GET 请求的负载运行器的响应标头中未经授权

Posted

技术标签:

【中文标题】HTTP/1.1 401 在 GET 请求的负载运行器的响应标头中未经授权【英文标题】:HTTP/1.1 401 Unauthorized in Response Headers in Load runner for GET Requests 【发布时间】:2015-10-14 06:37:36 【问题描述】:

我是 Load runner 的新手,在播放脚本时遇到问题

LR 12.50

操作系统 Windows 7 SP2

协议是移动 HTTP/html

录制模式为代理

让我解释一下我的场景

在执行以下函数时:

  web_custom_request("authenticate", 

        "URL=https://ws-xx.xxx.com/tcs/rest/authenticate?include=user,company",     
        "Method=POST", 
        "Resource=0", 
        "RecContentType=application/json", 
        "Referer=", 
        "Snapshot=t1.inf", 
        "Mode=HTTP", 
        "EncType=application/json",
        "Body=\"password\":\"xxx\",\"username\":\"xxx\",\"version\":\"1.0.40\"", 
        LAST);

对于上述 POST 方法,我得到如下响应

   HTTP/1.1 200 OK\r\n
   Date: Tue, 13 Oct 2015 19:19:21 GMT\r\n
   Server: Apache-Coyote/1.1\r\n
   Content-Type: application/json\r\n
   Set-Cookie: dtCookie=DBE9311E44E5C47902702DC762030583|TXlBcHB8MQ; Path=/;
   Domain=.xxx.com\r\n    
   Connection: close\r\n
   Transfer-Encoding: chunked\r\n

这很好,现在第二个自定义请求如下所示

  web_custom_request("profiles", 
        "URL=https://ws-test.xxx.com/tcs/rest/profiles", 
        "Method=GET", 
        "Resource=1", 
        "RecContentType=application/json", 
        "Referer=", 
        "Snapshot=t2.inf", 
        LAST);

对于重播日志中的上述 GET 请求:

401 未经授权的错误。

 GET /tcs/rest/profiles HTTP/1.1\r\n

     User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT)\r\n

    Accept: */*\r\n

    Connection: Keep-Alive\r\n

     Host: ws-test.xxx.com\r\n

   Cookie: dtCookie=DBE9311E44E5C47902702DC762030583|TXlBcHB8MQ\r\n
\r\n
 t=5921ms: 172-byte response headers for "https://ws-test.xxx.com/tcs/rest/profiles" (RelFrameId=1, Internal ID=2)

    HTTP/1.1 401 Unauthorized\r\n

   Date: Tue, 13 Oct 2015 19:19:22 GMT\r\n

   Server: Apache-Coyote/1.1\r\n

   Content-Type: application/json\r\n

    Connection: close\r\n

    Transfer-Encoding: chunked\r\n
   \r\n

t=5922ms: 4-byte chunked response overhead for "https://ws-test.xxx.com/tcs/rest/profiles" (RelFrameId=1, Internal ID=2)
    8b\r\n

 t=5923ms: 139-byte chunked response body for "https://ws-test.xxx.com/tcs/rest/profiles" (RelFrameId=1, Internal ID=2)
     "errors":["message":"Authentication required to access endpoint","status":"401","code":"



 NotAuthenticated","header":"Not Authenticated"]

我推荐了this link。

我从上面的自定义请求的理解,登录成功但是下一个 后续请求失败。

我使用了 web_cleanup_cookies() 函数但没有解决问题。

我尝试使用以下函数捕获 Cookie ID

web_reg_save_param("COOKIE_ID",
                        "LR= Cookie: dtCookie=" ,
                        "RB= |TXlBcHB8MQ\r\n",
                        "Ord=All",
                        "RelFrameId=1",
                        "Search=All",
                        LAST);

web_add_header("Cookie",lr_eval_string("COOKIE_ID"));

现在的问题是在我的脚本中放置参数“COOKIE_ID”的位置

脚本中没有 COOKIE_ID 的值?

如何处理这个问题?谁能帮帮我。

【问题讨论】:

【参考方案1】:

请在脚本中添加以下标题

web_set_sockets_option("SSL_VERSION","TLS");
web_set_user("username", "password", "domain:portno" );
web_set_sockets_option("INITIAL_BASIC_AUTH","1");

【讨论】:

@NaveenKumar,感谢您的建议。我尝试使用 web_set_sockets_option("INITIAL_BASIC_AUTH","1");然后我可以根据 Sivaramaraju 的建议在 Header 的快照视图下看到 AuthToken。我能够将 authToken 传递给下一个 GET 请求,但对其进行硬编码。【参考方案2】:
    在 Vugen 中,选择快照视图并比较记录和重播请求,怀疑重播请求中可能缺少标头。 如果 cookie 是唯一更改的内容,您可以使用 web_add_cookie 函数添加它。

【讨论】:

@Sivaramaraju,感谢您的建议。使用快照视图,我发现的authToken(“的authToken”:“eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJUQ1MiLCJhdWQiOiJXZWJTZXJ2aWNlQVBJIiwiaWF0IjoxNDQ0Mzg1ODU2LCJleHAiOjE0NDQ 0NzIyNTYsImluZm8iOnsidXNlcklkIjoxODIsImNvbXBhbnlOdW1iZXIiOiIyMDIwMDIyIiwicHJvZmlsZUlkIjoyODF9fQ.3pP9URRrmnRHnueszw4TrzDazPjRLmhG6bRir_FftAM”)是越来越传递到下一个自定义的请求。即 GET 请求是动态的。你能告诉我如何处理这个。 进展如何,作为标头或 cookie?基于以下步骤, 1. 如果它在标头中,则关联身份验证令牌,然后添加 web_add_header(“authToken”,“value”);在特定要求之前。 2.如果是在cookie中,关联认证token,然后添加web_add_header(“cookie”,”authToken=value”);在特定请求之前。 然后关联身份验证令牌并使用 web_add_header("authToken","correlatedvalue"); @Sivaramaraju,非常感谢您的帮助。最后使用您的方法解决了我们面临的 authToken 问题。但是我确实关联了 authToken 值,但是 vas throwing 错误找不到参数的值。但是我已将 authToken 值硬编码为 web_add_header("Authorization","Bearer eyJhbGciOiJIUzI1NiJ9. eyJpc3MiOiJUQ1MiLCJhdWQiOiJXZWJTZXJ2aWNlQVBJIiwiaWF0IjoxNDQ1MjQ2MjI1LCJleHAiOjE0NDUzMzI2MjUsImluZm8iOnsidXNlcklkIjoxMjUsImNvbXBhbnlOdW1iZXIiOiIyMDIwMDIyIiwicHJvZmlsZUlkIjoxOTV9fQ.lttdyOk2Ed52Ha5Q5rNy2hiR8jUywmvlICR3wY01kU“);我不知道这是否是好办法与否 SPAN>? @Sivaramaraju ,通过硬编码 authToken ,GET 请求被传递。它解决了我的问题,但不确定这样做是否是一种好方法。能否请您提出您的建议。

以上是关于HTTP/1.1 401 在 GET 请求的负载运行器的响应标头中未经授权的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 1.1, 返回值100.

android - EWS 2010 中的基本身份验证错误“HTTP/1.1 401 Unauthorized”

执行带有axios的GET请求时出现401错误

使用 Auth Headers 发送 axios get 请求时出现 401 错误

Axios GET 请求 Spotify API 返回 401

React - 带有标头的 ajax GET 请求仍返回 401(未经授权)